Tôi đang gặp vấn đề với việc cố gắng sử dụng Angular *ngFor
và *ngIf
trê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à null
và 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à *ngIf
tă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 li
nếu bộ sưu tập trống hoặc li
gó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?