Angular4_安全导航操作符 ( ?. ) 和空属性路径
安全导航操作符 ( ?. ) 和空属性路径 Angular 的安全导航操作符 ( The current hero's name is {{currentHero?.name}} 如果下列数据绑定中 The title is {{title}} 这个视图仍然被渲染出来,但是显示的值是空;只能看到 “The title is”,它后面却没有任何东西。 这是合理的行为。至少应用没有崩溃。 假设模板表达式涉及属性路径,在下例中,显示一个空 (null) 英雄的 The null hero's name is {{nullHero.name}}
JavaScript 抛出了空引用错误,Angular 也是如此: TypeError: Cannot read property 'name' of null in[null]. 晕,整个视图都不见了。 如果确信 另一方面,属性路径中的空值可能会时常发生,特别是当我们知道数据最终会出现。 当等待数据的时候,视图渲染器不应该抱怨,而应该把这个空属性路径显示为空白,就像上面 不幸的是,当 可以通过用NgIf代码环绕它来解决这个问题。 src/app/app.component.html<!--No hero,div not displayed,no error --> <div *ngIf="nullHero">The null hero's name is {{nullHero.name}}</div> 或者可以尝试通过 The hero's name is {{nullHero && nullHero.name}} 这些方法都有价值,但是会显得笨重,特别是当这个属性路径非常长的时候。 想象一下在一个很长的属性路径(如 Angular 安全导航操作符 ( <!-- No hero,no problem! --> The null hero's name is {{nullHero?.name}} 在像 非空断言操作符(!) 在 TypeScript 2.0 中,我们可以使用 在这种模式下,有类型的变量默认是不允许null或undefined值的,如果有未赋值的变量,或者试图把null或undefined赋值给不允许为空的变量,类型检查器就会抛出一个错误。 如果类型检查器在运行期间无法确定一个变量是null或undefined,那么它也会抛出一个错误。 我们自己可能知道它不会为空,但类型检查器不知道。 所以我们要告诉类型检查器,它不会为空,这时就要用到非空断言操作符。 Angular模板中的**非空断言操作符( 例如,在用*ngIf来检查过 "hero" The hero's name is {{hero!.name}} 在 Angular 编译器把你的模板转换成 TypeScript 代码时,这个操作符会防止 TypeScript 报告 " |