У меня проблема с попыткой использовать Angular *ngFor
и *ngIf
на одном элементе.
При попытке *ngFor
коллекцию в *ngFor
коллекция считается null
и поэтому происходит сбой при попытке доступа к ее свойствам в шаблоне.
@Component({
selector: 'shell',
template: '
<h3>Shell</h3><button (click)="toggle()">Toggle!</button>
<div *ngIf="show" *ngFor="let thing of stuff">
{{log(thing)}}
<span>{{thing.name}}</span>
</div>
'
})
export class ShellComponent implements OnInit {
public stuff:any[] = [];
public show:boolean = false;
constructor() {}
ngOnInit() {
this.stuff = [
{ name: 'abc', id: 1 },
{ name: 'huo', id: 2 },
{ name: 'bar', id: 3 },
{ name: 'foo', id: 4 },
{ name: 'thing', id: 5 },
{ name: 'other', id: 6 },
]
}
toggle() {
this.show = !this.show;
}
log(thing) {
console.log(thing);
}
}
Я знаю, что простое решение состоит в том, чтобы переместить *ngIf
на уровень выше, но для таких сценариев, как зацикливание элементов списка в ul
, я *ngIf
либо пустой li
если коллекция пустая, либо мой li
обернутый в избыточные элементы контейнера.,
Пример на этом плнкр.
Обратите внимание на ошибку консоли:
EXCEPTION: TypeError: Cannot read property 'name' of null in [{{thing.name}} in [email protected]:12]
Я делаю что-то не так или это ошибка?