我有一个名为records
的变量,
现在我想在angular2 / typescript中检查它是否是一个数组?
在AngularJS中,我曾经做过以下事情:
ng-if="selectedCol.data && !isArray(selectedCol.data)"
但是当我试图做以下事情时它不起作用;
*ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)"
它给我以下错误:
TypeError:无法读取属性' isArray'未定义的 任何输入?
答案 0 :(得分:17)
Angular 2模板在Component
的上下文中执行,这意味着,您只能访问Component
中定义的属性/方法
最简单的方法是在isArray
Component
方法
isArray(obj : any ) {
return Array.isArray(obj)
}
在模板中
*ngIf="isArray(selectedCol.model.data)"
要避免使用样板代码,请使用isArray
方法定义服务,注册为Singleton,注入Component
并通过服务属性使用isArray
方法
或者,在_array
中定义Component
属性并为其指定Array
类型
private _array = Array;
在模板中
*ngIf="_array.isArray(selectedCol.model.data)"
答案 1 :(得分:5)
除了@tchelidze所说的:
Angular 2在facade/lang
中提供了一个名为isArray
的包装器,导出并定义如下:
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)"
答案 2 :(得分:3)
虽然不是最有效的解决方案(参见其他答案),[].constructor.isArray
适用于任何表达式上下文,并且不需要使用语言级帮助程序污染组件类:
*ngIf="selectedCol.model.data && [].constructor.isArray(selectedCol.model.data)"