angular2 – * ngIf和* ngFor在相同的元素导致错误

前端之家收集整理的这篇文章主要介绍了angular2 – * ngIf和* ngFor在相同的元素导致错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,试图使用Angular的* ngFor和* ngIf在同一个元素。

当试图循环遍历* 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

  constructor) {}

  ngOnInit() {
    this.show = false;

    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,我最终会有一个空的李,如果集合是空的,或我的lis包裹在冗余容器元素。

示例在这plnkr

注意控制台错误

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

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

Angular2不支持同一个元素上的一个以上的结构指令。
作为解决方法,请使用< ng-container>元素,允许您为每个结构指令使用单独的元素,但它不会标记到DOM。
<ng-container *ngIf="show">
  <div *ngFor="let thing of stuff">
    {{log(thing)}}
    <span>{{thing.name}}</span>
  </div>
</ng-container>

< template>允许做同样的但使用不同的语法,这是混乱,不再推荐

<template [ngIf]="show">
  <div *ngFor="let thing of stuff">
    {{log(thing)}}
    <span>{{thing.name}}</span>
  </div>
</template>

猜你在找的Angularjs相关文章