如何检查管道中未定义的项目
How to check undefined items in a pipe?
我使用Angular2和自定义管道来过滤我的项目,如:
transform(value: any, args: string[]): any {
if (args) {
return value.filter(foo => foo.url.indexOf(args) != -1)
};
return value;
}
但是我的一些foo.url
项目是未定义的,我得到了这个错误:
TypeError: Cannot read property 'indexOf' of undefined
如何检查属性是否未定义并且将被筛选?
您正在使用TypeScript,因此是时候开始利用它带来的所有好处了。与其用类型为any
的参数编写此transform
函数,不如指定类型。这将有助于缓解像这样愚蠢的运行时问题。您显然假设value
参数是一个数组,所以将其声明为一个数组(我们将对返回类型执行同样的操作)。那么它是什么类型的数组,让我们来演示一下。。。而不是:
transform(value: any, args: string[]): any {
if (args) {
return value.filter(foo => foo.url.indexOf(args) != -1)
};
return value;
}
让我们这样写:
transform(value: Foo[], args: string[]): Foo[] {
if (args) {
return value.filter(foo => foo.url.indexOf(args) != -1)
};
return value;
}
然后我们可以有一个表示Foo
:的类
export class Foo {
constructor(url: string);
}
这将确保有助于防止属性url
在运行时为undefined
的运行时问题。
你可以试试这个:
transform(value: any, args: string[]): any {
if (args) {
return value.filter(foo => {
return (foo.url && (foo.url.indexOf(args) != -1));
});
}
return value;
}
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- 当项目投入使用时,Javascript是未定义的
- 在 JavaScript 对象中添加子对象时获取“无法设置未定义的属性'项目'”
- AngularJs $scope在离子项目中是未定义的
- 使用 EJS 部分和角度的节点/快速项目:未捕获的引用错误:未定义角度
- AngularJS对于$scope中的项目$scope未定义的
- 在Visual Studio 2015中加载MVC 5项目时,未定义$
- device.platform return'设备未定义'关于cordova项目
- 未捕获的ReferenceError:Haxe-js项目中未定义$hxClasses
- 不能读取property 'top'未定义的Ruby on Rails项目
- 在React项目中,“this”"转换为“未定义”
- jqgrid中的自动完成文本框显示错误,项目未定义
- 如何调用项目中未定义的函数
- 使用Grunt的Node JS项目,生成的JS文件有ReferenceError:窗口未定义
- JSBIN项目:RX.Js 5.0.0拉出'未定义'错误
- Cordova&SQLite-所有行项目返回为'未定义'
- 为d3项目加载csv文件时未定义的值
- cordova.file在android的ionic项目中未定义