Javascript 如何在Angular 2+;模板?
我有一个名为Javascript 如何在Angular 2+;模板?,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个名为records的变量 现在我想检查它是否是angular2/typescript中的数组 在AngularJS中,我曾经做过以下工作: ng-if="selectedCol.data && !isArray(selectedCol.data)" 但当我试图做以下事情时,它不起作用 *ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)" 这给了我以下的错误: T
records
的变量
现在我想检查它是否是angular2/typescript中的数组
在AngularJS中,我曾经做过以下工作:
ng-if="selectedCol.data && !isArray(selectedCol.data)"
但当我试图做以下事情时,它不起作用
*ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)"
这给了我以下的错误:
TypeError:无法读取未定义的属性“isArray”
有什么意见吗
Angular 2模板在
组件的上下文中执行,这意味着,您只能访问组件中定义的属性/方法
isArray(obj : any ) {
return Array.isArray(obj)
}
最简单的方法是在组件中定义isArray
方法
isArray(obj : any ) {
return Array.isArray(obj)
}
模板中
*ngIf="isArray(selectedCol.model.data)"
要避免样板代码,请使用isArray
方法定义服务,注册为Singleton,注入Component
并通过服务属性使用isArray
方法
或者,在组件
中定义数组
属性,并为其指定数组
类型
private _array = Array;
模板中
*ngIf="_array.isArray(selectedCol.model.data)"
除了@tchelidze所说的:
Angular 2在导出中提供了一个名为isArray
的包装器,定义如下:
export function isArray(obj: any): boolean {
return Array.isArray(obj);
}
import {isArray} from '@angular/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)"
允许我们在模板中使用私有变量吗?模板不存在于组件类内,但存在于组件类外。