Angular2 * ngIf는 템플릿에서 객체 배열 길이를 확인합니다.


89

에 대해 참조 https://angular.io/docs/ts/latest/guide/displaying-data.html 및 스택 ngIf이 * 사용하여 각 2 템플릿에 빈 개체를 확인하는 방법을 여전히 구문 오류 자체 문맥에 정의되지 않은 받고. * ngIf 조건을 제거하면 teamMembers의 값에 액세스 할 수 있도록 일부 값을 입력하면 teamMembers의 값을 얻게됩니다.

teamMember개체는 [ ] array조건 배열이 크기별로 비어 있는지 확인하려고합니다.

시도 :

<div class="row" *ngIf="(teamMembers | json) != '{}'">

<div class="row" *ngIf="teamMembers.length > 0"> //Check length great than
                                                 throwing syntax error
            <div class="col-md-12">
                <h4>Team Members</h4>
                <ul class="avatar" *ngFor="let member of teamMembers">
                    <li><a href=""><gravatar-image [size]="80" [email]="member.email"></gravatar-image></a></li>
                </ul>
            </div>
        </div>

구성 요소 :

@Component({
selector: 'pbi-editor',
})
export class AppComponent implements OnInit {
teamMembers: User[];

어떤 도움이라도 좋을 것입니다.


"Throwing syntax error"정확한 오류 메시지는 무엇입니까?
Günter Zöchbauer

ORIGINAL EXCEPTION : TypeError : self.context.teamMembers is not a function for * ngIf = "teamMembers.length> 0"나는 아래 답변으로 시도 할 것입니다 1 min pls
Karthigeyan Vellasamy

답변:


286
<div class="row" *ngIf="teamMembers?.length > 0">

teamMembers값 이 있는지 먼저 확인 하고 값 teamMembers이없는 경우 조건의 첫 번째 부분이 이미 실패했기 때문에 액세스 length를 시도하지 않습니다 undefined.


3
다음은 올바른 링크입니다 safe navigation operator. angular.io/guide/template-syntax#safe-navigation-operator
Michael Czechowski

이로 인해 연산자 '>'가 'boolean'및 'number'유형에 적용될 수 없습니다. --aot 또는 자극과 빌드를 최적화하면서
Krish 수출

18

*ngIf="teamMembers != 0"데이터가 있는지 확인하는 데 사용할 수 있습니다.


2

약간의 과잉이지만 객체, 세트, ​​맵 또는 배열이 비어 있지 않은지 확인하는 라이브러리 ngx-if-empty-or-has-items를 만들었습니다 . 누군가에게 도움이 될 수도 있습니다. ngIf와 동일한 기능을 가지고 있습니다 (then, else 및 'as'구문이 지원됨).

arrayOrObjWithData = ['1'] || {id: 1}

<h1 *ngxIfNotEmpty="arrayOrObjWithData">
  You will see it
</h1>

 or 
 // store the result of async pipe in variable
 <h1 *ngxIfNotEmpty="arrayOrObjWithData$ | async as obj">
  {{obj.id}}
</h1>

 or

noData = [] || {}
<h1 *ngxIfHasItems="noData">
   You will NOT see it
</h1>

1

당신이 사용할 수있는

<div class="col-sm-12" *ngIf="event.attendees?.length">

없이 event.attendees?.length > 0또는 심지어event.attendees?length != 0

?.length이미 부울 값을 반환 하기 때문 입니다.

in array가 무언가가 될 경우 다른 것은 표시하지 않습니다.


0

이 기사는 왜 그것이 저에게도 효과가 없는지 알아내는 데 많은 도움이되었습니다. 웹 페이지 로딩과 angular 2가 내가 생각하는 시점이 아닌 타임 라인으로 상호 작용하는 방법을 생각할 수있는 교훈을줍니다. 다른 사람이이 점을 언급하는 것을 보지 못했기 때문에 ...

* ngIf가 필요한 이유는 나머지 OnInit 작업이 발생하기 전에 해당 변수의 길이를 확인하고 "정의되지 않은 길이"오류를 던지기 때문입니다. 그래서 당신은? 아직 존재하지 않을 것이기 때문에 곧있을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.