Javascript ng在非数组/对象上重复/以相同的方式处理数组和非数组
我经常希望以相同的方式处理数组和单个对象。例如,我有一个对象的属性,它可以是数组,也可以是字符串(请查看Javascript ng在非数组/对象上重复/以相同的方式处理数组和非数组,javascript,arrays,angularjs,angularjs-ng-repeat,Javascript,Arrays,Angularjs,Angularjs Ng Repeat,我经常希望以相同的方式处理数组和单个对象。例如,我有一个对象的属性,它可以是数组,也可以是字符串(请查看scale属性): 我想要的是显示我的比例如下: <span ng-repeat="scale in experimentType.scale"> <!--some decoration here--> {{scale}} </span> {{scale}} 当然,这对单个字符串值不起作用。有没有什么优雅的方法可以不用担心我是在处理字符串还是在处理数
scale
属性):
我想要的是显示我的比例
如下:
<span ng-repeat="scale in experimentType.scale">
<!--some decoration here--> {{scale}}
</span>
{{scale}}
当然,这对单个字符串值不起作用。有没有什么优雅的方法可以不用担心我是在处理字符串还是在处理数组?您可以创建自定义筛选器,请参见下文
var-app=angular.module(“app”,[]);
函数MainCtrl(){
this.message=“欢迎”;
此参数。数据=[{
“id”:“00000000014”,
“名称”:“实验类型14”,
“尺度”:[“全脑”、“细胞”],
},{
“id”:“00000000015”,
“名称”:“实验类型15”,
“比例”:“单元”,
}];
}
函数toArray(){
返回函数(输入){
控制台日志(输入);
if(角度isArray(输入)){
返回输入;
}否则{
返回[输入];
}
};
}
角度。模块(“app”)。控制器(“MainCtrl”,MainCtrl);
角度模块(“应用”)过滤器(“toArray”,toArray)代码>
{{vm.message}}
{{item.name}
- {{scale}
这是我最好的尝试。我只是在范围内实现了以下功能:
$scope.toArrayIfNot = function (input) {
if (Object.prototype.toString.call(input) === '[object Array]') {
return input;
}
return [input];
};
然后我这样使用它:
<span ng-repeat="scale in toArrayIfNot(experimentType.scale)">
<!--some decoration here--> {{scale}}
</span>
{{scale}}
我个人认为过滤器是处理这一问题的最佳方法。一种统一数据的方法,这样你的视图只需要考虑一种格式。我也在考虑类似的smth。我喜欢jquery中的工作方式:您只需将内容包装在$()
中,就可以忘记对象/数组的问题。
<span ng-repeat="scale in toArrayIfNot(experimentType.scale)">
<!--some decoration here--> {{scale}}
</span>