Angular 角度2*ngIf条件体在条件为false时仍在渲染

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

我在Angular 2模板中有一个循环,它给了我一个错误,因为我的服务,
\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”。德普。