我有一个关于判断对象中是否存在某个字段的问题.

我想打印用户拥有的所有类别,所以我会这样做:

  <ul *ngIf="user.categories.length >  0" *ngFor="#category of user.categories">
    <li>
      {{category.name}}
    </li>
  </ul>

原因是什么?所有数据都打印了PROPERLY份,但我在web控制台中遇到了如下错误:

Cannot read property 'name' of null

但当我做一些类似的事情时:

  <ul *ngIf="user.categories.length >  0" *ngFor="#category of user.categories">
    <li *ngIf="category">
      {{category.name}}
    </li>
  </ul>

那么一切都好了.

我是不是做错了什么,或者我可能每次都要判断这个?你有没有遇到过这样的问题?

推荐答案

basic usage

使用安全导航操作员

{{category?.name}}

则仅当category不是null时才读取name.

array

这只适用于.(取消引用)运算符.

{{records && records[0]}}

See also Angular 2 - Cannot read property '0' of undefined error with context ERROR CONTEXT: [object Object]

async pipe

有了async根管子,它可以像

{{(chapters | async)?.length

100

目前有ngModel个,需要将其拆分为

[ngModel]="details?.firstname" (ngModelChange)="details.firstname = $event"

另见第Data is not appending to template in angular2

100

另一种方法是始终使用*ngIf="data"包装视图的一部分,以防止在data可用之前呈现该部分,以防止出现取消引用错误.

Angular相关问答推荐

Angular路由不响应子路由的子路由

在Angular中将路由解析器提供程序和组件提供程序相结合

MAT表的内联文本编辑-未刷新编辑图标

如何在ANGLING v17中使用鞋带样式组件?

列表和映射的SCSS语法

如何在AngularJs中剪断细绳

错误TS2531:对象可能为空.论窗体数组控件

如何将表单作为Angular 分量输入传递?

当try 关闭浏览器选项卡时显示alert 时,我是否可以捕获用户是否取消警告

BehaviorSubject 在 Angular 中制作数据之间的时间表(或计时器)

为什么 AngularFire .set() 永远等待响应并且不继续?

过滤 ngfor Angular 的计数

清除Angular2中的输入文本字段

如何在 Angular 2 应用程序中配置不同的开发环境

Angular 4.3拦截器不起作用

Angular-CLI 代理到后端不起作用

Angular - 工作区中未设置配置

Angular 2 应用程序中没有Access-Control-Allow-Origin标头

RxJS:takeUntil() Angular 组件的 ngOnDestroy()

如何在Angular 2中将对象从一个组件传递到另一个组件?