Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Angular 2+;模板?_Javascript_Angular_Typescript - Fatal编程技术网

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)"

允许我们在模板中使用私有变量吗?模板不存在于组件类内,但存在于组件类外。