我有一个非常基本的场景(有点新的角度)。我正在尝试转换 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>
我有一个非常基本的场景(有点新的角度)。我正在尝试转换 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>
有帮助的一件事是创建一个“地图”过滤器,如下所示:
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 方法。
你不能做这个。相反,使用map
and 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
属性。$scope
menuItems
这是另一种使用过滤器更易于维护的方法:
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>
我不确定它是否可能......如何在没有 html 元素的情况下使用 ng-repeat
但你总是可以这样做:
<p>
<span ng-repeat="item in menuItems">{{item.name}},</span>
</p>
你也可以这样做:
<p>
<span ng-repeat="(item,name) in menuItems">{{name}}{{$last ? '' : ', '}} </span>
</p>
我在我遇到的类似问题上使用了这种方法,我尽量不要混合使用 javascript/jquery 和 angular。从这里得到解决方案: Using comma as list separator with AngularJS
如果您愿意使用<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, 逗号在最后一项之前用“和”分隔
谢谢!