我在try 对同一元素使用Angular 的*ngFor*ngIf时遇到问题.

当try 循环访问*ngFor中的集合时,该集合被视为null,因此在try 访问其在模板中的属性时失败.

@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中循环列表项这样的场景,如果集合是空的,我会得到一个空的li,或者我的li被包装在冗余的容器元素中.

举个例子.

请注意控制台错误:

EXCEPTION: TypeError: Cannot read property 'name' of null in [{{thing.name}} in ShellComponent@5:12]

是我做错了什么,还是这是个bug?

推荐答案

Angular v2在同一个元素上不支持多个 struct 指令

<ng-container *ngIf="show">
  <div *ngFor="let thing of stuff">
    {{log(thing)}}
    <span>{{thing.name}}</span>
  </div>
</ng-container>

<ng-template>(ANGLING v4之前的<template>)允许执行相同的操作,但使用不同的语法,这很容易混淆,因此不再推荐使用

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

Angular相关问答推荐

无法绑定到ngIf,因为它不是dis angular 17的已知属性

如何避免使用CSS动画制作的幻灯片中闪烁?

angular 17:app.config. server.ts中的mergeApplicationconfig导致初始化在app.config. ts中导入的提供程序

自动完成搜索过滤器不适用于Angular 中动态添加的输入字段

身份验证卫士给了我17个Angular 的任何类型

Angular AuthGuard:不推荐使用 CanActivate 和 CanActivateChild.如何更换它们?

手动关闭 SSE 连接:Angular

RxJs 中的空闲可观察对象在幕后做了什么?

CORS 策略和 .NET Core 3.1 的问题

如何 use/import http模块?

res.json() 不是函数

angular 2 http withCredentials

如何提高 Angular2 应用程序的加载性能?

如何在 Angular 2 的同一个组件中使用多个 ng-content?

从 angular2 模板调用静态函数

NG2-Charts 无法绑定到 datasets,因为它不是 canvas的已知属性

Firestore 从集合中获取文档 ID

在angular-cli中创建模块时生成路由模块

Angular 2 中的动态模板 URL

如何使用 @ngrx/store 获取 State 对象的当前值?