*ngIf 和 *ngFor 在同一元素上导致错误 [英] *ngIf and *ngFor on same element causing error

查看:23
本文介绍了*ngIf 和 *ngFor 在同一元素上导致错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试在同一元素上使用 Angular 的 *ngFor*ngIf 时遇到问题.

当尝试遍历 *ngFor 中的集合时,该集合被视为 null,因此在尝试访问模板中的属性时失败.>

@Component({选择器:'壳',模板:`<h3>Shell</h3><button (click)="toggle()">Toggle!</button><div *ngIf="show" *ngFor="让东西的东西">{{日志(东西)}}<span>{{thing.name}}</span>

`})导出类 ShellComponent 实现 OnInit {公共的东西:任何[] = [];公开展示:boolean = false;构造函数(){}ngOnInit() {这个.东西= [{名称:'abc',ID:1},{ 名称:'huo',id:2 },{名称:'酒吧',ID:3},{名称:'foo',ID:4},{名称:'东西',ID:5},{名称:'其他',ID:6},]}切换(){this.show = !this.show;}日志(东西){控制台日志(东西);}}

我知道简单的解决方案是将 *ngIf 上移一个级别,但是对于循环遍历 ul 中的列表项等场景,我最终会得到一个空的 li 如果集合是空的,或者我的 li 被包裹在冗余的容器元素中.

此示例 plnkr.

注意控制台错误:

EXCEPTION: TypeError: 无法读取 [{{thing.name}} in ShellComponent@5:12] 中的 null 属性name"

我做错了什么还是这是一个错误?

解决方案

Angular v2 在同一个元素上不支持多个结构指令.
作为解决方法,请使用 元素,该元素允许您为每个结构指令使用单独的元素,但它未标记到 DOM.

<div *ngFor="放东西">{{日志(东西)}}<span>{{thing.name}}</span>

</ng-容器>

<ng-template>(Angular v4 之前的