假设我有一个json对象:
{record: [{value:"some string"}, {value:["A string", "B string"]}]}
我想要输出的输出非常简单:如果有单个字符串,则为字符串;如果存在字符串数组,则为串联字符串
value: some string
value: A string, B string
但是当我写这段代码时:
<span ng-repeat="r in record">value: {{r.value}}<br/></span>
这两个值都被认为是字符串,我得到了这个输出:
value: some string
value: ["A string", "B string"]
当我写这段代码时:
<span ng-repeat="r in record">value: {{r.value.join(", ")}}<br/></span>
这两个值都被认为是数组,因为第一个不是,我得到这个(第一个值丢失):
value:
value: A string, B string
处理此问题的最佳方法是什么?
答案 0 :(得分:1)
您可以在表达式中打开类型:
<span ng-repeat="r in record">
value: {{ Array.isArray(r.value) ? r.value.join(", ") : r.value }}<br/>
</span>
或者你可以添加一个过滤器来封装逻辑:
myModule.filter('joinIfArray', function () {
return function (input) {
return Array.isArray(input) ? input.join(", ") : input;
};
});
并使用它:
<span ng-repeat="r in record">value: {{ r.value | joinIfArray }}<br/></span>
答案 1 :(得分:1)
另一种方式,它应该是递归的。
您当前的文件:
<span ng-repeat="r in record track by $index" ng-include="'mytemplate.html'"></span>
template.html:
<span ng-if="! isArray(r.value)">value: {{r.value}}<br/></span>
<span ng-if="isArray(r.value)"><span ng-include="'mytemplate.html'"></span><span ng-if="!$last">, </span></span>
在控制器中:
$scope.is_array = function(data) {
return Array.isArray(data);
}
答案 2 :(得分:1)
略短:
<span ng-repeat="r in record">value: {{r.value.join(", ") || r.value}}<br/></span>