Tôi đang gặp vấn đề với việc cố gắng sử dụng Angular *ngForvà *ngIftrên cùng một yếu tố.
Khi cố gắng lặp qua bộ sưu tập trong *ngFor, bộ sưu tập được xem là nullvà do đó không thành công khi cố gắng truy cập các thuộc tính của nó trong mẫu.
@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);
}
}
Tôi biết giải pháp dễ dàng là *ngIftăng cấp độ nhưng đối với các tình huống như lặp qua các mục trong danh sách ul, tôi sẽ kết thúc bằng một khoảng trống linếu bộ sưu tập trống hoặc ligói của tôi được bọc trong các phần tử container dự phòng.
Ví dụ tại plnkr này .
Lưu ý lỗi giao diện điều khiển:
EXCEPTION: TypeError: Cannot read property 'name' of null in [{{thing.name}} in ShellComponent@5:12]
Tôi đang làm gì đó sai hay đây là một lỗi?