无法使用ngIf检查数组是初始化还是空

时间:2017-03-25 04:01:53

标签: angularjs angular

我的组件上有一个属性,用于可能会填充的警报消息:

alerts: ReportAlertMessage[];

如果数组有任何数据,我正在尝试向我们ngIf显示输出。

我第一次尝试:

<div class="row" *ngIf="alerts">

但它不起作用,它会返回此错误:

  

无法读取未定义

的属性“nativeElement”

所以我试过了:

<div class="row" *ngIf="typeof(alerts) !== 'undefined'">

这给了我:

  

self.context.typeof不是函数

我想检查它是否已初始化且至少有1个值。使用ngIf执行此操作的方法是什么?

编辑:

完整的异常消息。问题似乎是偶然的,因为我用一个可观察的数据填充数组:

EXCEPTION: Uncaught (in promise): Error: Error in :0:0 caused by: Cannot read property 'nativeElement' of undefined
Error: Error in :0:0 caused by: Cannot read property 'nativeElement' of undefined
    at ViewWrappedError.ZoneAwareError (http://localhost:4200/polyfills.bundle.js:3561:33)
    at ViewWrappedError.BaseError [as constructor] (http://localhost:4200/vendor.bundle.js:30581:16)
    at ViewWrappedError.WrappedError [as constructor] (http://localhost:4200/vendor.bundle.js:30646:16)
    at new ViewWrappedError (http://localhost:4200/vendor.bundle.js:61302:16)
    at CompiledTemplate.proxyViewClass.DebugAppView._rethrowWithContext (http://localhost:4200/vendor.bundle.js:83662:23)
    at CompiledTemplate.proxyViewClass.DebugAppView.detectChanges (http://localhost:4200/vendor.bundle.js:83635:18)
    at ViewRef_.detectChanges (http://localhost:4200/vendor.bundle.js:62229:20)
    at RouterOutlet.activate (http://localhost:4200/vendor.bundle.js:67737:42)
    at ActivateRoutes.placeComponentIntoOutlet (http://localhost:4200/vendor.bundle.js:25393:16)
    at ActivateRoutes.activateRoutes (http://localhost:4200/vendor.bundle.js:25360:26)
    at http://localhost:4200/vendor.bundle.js:25296:58
    at Array.forEach (native)
    at ActivateRoutes.activateChildRoutes (http://localhost:4200/vendor.bundle.js:25296:29)
    at ActivateRoutes.activate (http://localhost:4200/vendor.bundle.js:25270:14)
    at http://localhost:4200/vendor.bundle.js:24830:22

我也试过写一个静态bool。当我从可观察的

设置回调内的属性值时,似乎会发生此错误

3 个答案:

答案 0 :(得分:0)

似乎第一种是正确的方法。它是警告访问修饰符public

答案 1 :(得分:0)

试试这个

&LT; div class="row" *ngIf="alerts.length">

答案 2 :(得分:0)

或者,您可以将组件中的方法称为

<div class="row" *ngIf="isEmpty(alerts)">

组件功能

isEmpty(alerts){
    if(alerts===[]) {
         return true;
    } else {
         return false;
    }
}