Angular 角度2*ngIf条件体在条件为false时仍在渲染
我在Angular 2模板中有一个循环,它给了我一个错误,因为我的服务,Angular 角度2*ngIf条件体在条件为false时仍在渲染,angular,typescript,angular2-template,Angular,Typescript,Angular2 Template,我在Angular 2模板中有一个循环,它给了我一个错误,因为我的服务,\u adfService,显然是空的(即使它在任何错误之前都记录为非空的)。只是为了让它工作,我将它包装在一个if语句中,以查看是否可以在\u adfService恰好为空时阻止循环呈现。我仍然得到相同的错误: Cannot read property 'grids' of undefined 如果Angular 2假定不渲染条件体,为什么我不能防止循环导致错误 <span *ngIf="_adfServi
\u adfService
,显然是空的(即使它在任何错误之前都记录为非空的)。只是为了让它工作,我将它包装在一个if
语句中,以查看是否可以在\u adfService
恰好为空时阻止循环呈现。我仍然得到相同的错误:
Cannot read property 'grids' of undefined
如果Angular 2假定不渲染条件体,为什么我不能防止循环导致错误
<span *ngIf="_adfService != null">
<li *ngFor="let grid of _adfService.grids" router-active>
<a class="navlink" [routerLink]="['group/1/grid/']">Grid 1</a>
</li>
</span>
网格1
这是因为您在*ngIf中计算null,这与Javascript/TypeScript中未定义的值完全不同
要解决此问题,只需将*ngIf更改为:
<span *ngIf="_adfService">
如果_adfService变量的计算结果为“true”(即,不是未定义的、非null的、非false的、非零的,也不是空字符串),则该函数将进行计算,因此如果变量未使用您尝试使用的对象初始化,则不会呈现*ngFor。错误不能来自您发布的代码。它可能来自组件中的某些代码。您是否忘记了构造函数中的参数属性注释,如
构造函数(只读\u adfService:adfService)
?如果也不起作用,请尝试*ngIf=“\u adfService!==null”或*ngIf=“\u adfService”,问题存在于其他地方。@ulou显然未定义
没有理由这样做。另外,*ngIf=“\u adfService”
是更好的样式,将检查所有这些,并且是正确的,除非服务可以有效地具有没有任何意义的值0
或NaN
。停止使用null
该死!我明白了。我假设错误来自我的组件,但它来自我的服务中,我从getter中的未定义对象读取“grid”。德普。