如何在打字稿中使用isArray()?
问题描述:
我有这个变量名为records
,如何在打字稿中使用isArray()?
现在我想检查它的数组或不在angular2/typescript?
在AngularJS我用来做下列的程序:
ng-if="selectedCol.data && !isArray(selectedCol.data)"
但是当我尝试做以下它不工作;
*ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)"
它给我下面的错误:
TypeError: Cannot read property 'isArray' of undefined any inputs?
答
角2模板内Component
的背景,意义执行,你可以在里面Component
最简单的方式定义只访问属性/方法是在您的方法中定义isArray
方法Component
isArray(obj : any) {
return Array.isArray(obj)
}
在模板
*ngIf="isArray(selectedCol.model.data)"
为了避免样板代码,与isArray
方法定义服务,注册为单件,注入Component
和经由服务属性
备选地使用isArray
方法,定义_array
属性在您的Component
中,并指定Array
键入它
private _array = Array;
在模板
*ngIf="_array.isArray(selectedCol.model.data)"
答
除了什么@tchelidze说:
角2提供了名为isArray
在facade/lang
出口和确定这样的包装:
export function isArray(obj: any): boolean {
return Array.isArray(obj);
}
您可以导入它进入你的组件像这样:
import {isArray} from '@angular/facade/lang';
然后,你可以在您的组件公开揭露它:
this.isArray = isArray
而在你的模板中使用像这样:
*ng-if="selectedCol.data && !isArray(selectedCol.data)"
答
虽然不是最有效的解决方案(见其他答案),[].constructor.isArray
适用于任何表达上下文,并且不需要使用语言级帮助器污染组件类:
*ngIf="selectedCol.model.data && [].constructor.isArray(selectedCol.model.data)"