Angularjs,从json对象输出字符串或字符串数​​组

时间:2016-01-09 19:57:07

标签: javascript angularjs json

假设我有一个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

处理此问题的最佳方法是什么?

3 个答案:

答案 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>
相关问题