8

我有一个非常基本的场景(有点新的角度)。我正在尝试转换 JSON:

[
    {'name': 'Nick'},
    {'name': 'David'},
    {'name': 'John'},
]

至:

<p>Nick,David,John</p>

但我不知道如何生成单个“p”。你如何在里面调用 ng-repeat<p>

<p ng-repeat="item in menuItems">{{item.name}}</p>
4

7 回答 7

16

有帮助的一件事是创建一个“地图”过滤器,如下所示:

myModule.filter('map', function() {
  return function(input, propName) {
    return input.map(function(item) {
      return item[propName];
    });
  };
});

这是映射到命名属性的简单案例,您可以让它更花哨并理解点符号等。现在,在您看来,您可以这样做:

<p>
  {{(menuItems | map:'name').join(',')}}
</p>

因为 map 过滤器返回一个 Array,它在 Javascript 中已经有一个内置的 join 方法。

于 2013-05-21T15:29:27.917 回答
3

你不能做这个。相反,使用mapand join。例如:

<p>{{names}}</p>

$scope.menuItems = [
  {'name': 'Nick'},
  {'name': 'David'},
  {'name': 'John'},
];
$scope.$watch('menuItems', function(menuItems) { 
    $scope.names = menuItems.map(function(item) { return item.name }).join(',');
});

这将$watch更新menuItems每当更改时的names属性。$scopemenuItems

于 2013-05-21T15:24:06.023 回答
0

这是另一种使用过滤器更易于维护的方法:

app.filter('commaSeparated', function () {
    return function(input, property) {
        var csv = '';
        for (var i = 0; i < input.length; i++) {
            csv += input[i][property];
            if (i < input.length - 1) {
                csv += ',';
            }
        }
        return csv;
    };
});

显然,您可以用 $scope.menuItems 替换文字数组...

<p>
    {{ [ {'name': 'Nick'}, {'name': 'David'}, {'name': 'John'} ] | commaSeparated:'name' }}
</p>
于 2013-05-21T15:33:51.557 回答
0

我不确定它是否可能......如何在没有 html 元素的情况下使用 ng-repeat

但你总是可以这样做:

<p>
    <span ng-repeat="item in menuItems">{{item.name}},</span>
</p>
于 2013-05-21T15:15:09.930 回答
0

我喜欢地图过滤器的想法。这很酷。对于更少的代码,试试这个答案。跳过name属性和ng-repeat并使用join() 函数

<p>{{people.join(', ')}}</p>

不幸的是,这不起作用:

<p>{{people.map(function(item){return item.name;}).join(', ')}}</p>
于 2015-04-02T04:58:24.247 回答
0

你也可以这样做:

<p>    
   <span ng-repeat="(item,name) in menuItems">{{name}}{{$last ? '' : ', '}} </span>
</p>

我在我遇到的类似问题上使用了这种方法,我尽量不要混合使用 javascript/jquery 和 angular。从这里得到解决方案: Using comma as list separator with AngularJS

于 2016-12-29T18:17:29.163 回答
0

如果您愿意使用<span>而不是<p>,那么遵循对象数组,

[
      { "name": "John" },
      { "name": "David" },
      { "name": "Gopal" },
      { "name": "Anil" },
      { "name": "Gurjeet" }
]

可以显示为:John、David、Gopal、Anil 和 Gurjeet

使用此代码段:

<span ng-repeat="admin in data">{{$first ? '' : $last ? ' and ' : ', '}}{{admin.name}}</span>

得到这个解决方案:AngularJS ng-repeat, 逗号在最后一项之前用“和”分隔

谢谢!

于 2016-08-11T14:49:11.023 回答