Dav*_*ury 37 angularjs angularjs-ng-repeat
我有一个项目清单......
$scope.Users =[{
UserName: ''
}];
Run Code Online (Sandbox Code Playgroud)
在我看来,我想列出这样的假设我只有4个项目 $scope:Users
Username1, Username2, Username3 and Username4
<span data-ng-repeat="user in Users">{{user.Username}}</span>{{$last ? '' : ', '}}
Run Code Online (Sandbox Code Playgroud)
上面的表达式基本上会在每个项目后添加逗号并且工作正常.
我的问题是如何and
在最后一个项目之前添加一个关键字,所以它会像:
Username1, Username2, Username3 and Username4
Run Code Online (Sandbox Code Playgroud)
代替:
Username1, Username2, Username3, Username4
Run Code Online (Sandbox Code Playgroud)
小智 54
$ last是truthy值..所以它保持true或false并且它不包含最后一个元素索引..
我想下面的表达式可以解决你的问题
<p><span ng-repeat="user in Users">
{{user.Username}} {{$last ? '' : ($index==Users.length-2) ? ' and ' : ', '}}
</span></p>
Run Code Online (Sandbox Code Playgroud)
还要确保在ng-repeat元素中包含$ last的表达式,而不是在其外部
请检查以下工作小提琴
http://jsfiddle.net/hrishi1183/Sek8F/2/
ama*_*hra 29
这可能是解决方案之一
<span data-ng-repeat="user in Users">{{user.Username}}<font ng-show="!$last">,</font></span>
Run Code Online (Sandbox Code Playgroud)
a b*_*ver 20
<span ng-repeat="user in Users">{{$first ? '' : $last ? ' and ' : ', '}}{{user.Username}}</span>
Run Code Online (Sandbox Code Playgroud)
而不是附加一些东西前置它.您可以使用$first
省略第一个.然后,您可以使用$last
"和"而不是逗号.
比尔盖茨向Username1,Username2和Username3捐赠了600万.
VS
比尔盖茨向Username1,Username2和Username3捐赠600万.
如果没有连续逗号,则句子不能清楚地表明每个用户将获得相同的份额.
<span ng-repeat="user in Users">
{{user.Username}}{{$last ? '' : ($index==Username.length-2) ? ', and ' : ', '}}
</span>
Run Code Online (Sandbox Code Playgroud)
输出:
Username1, Username2, Username3, and Username4
Run Code Online (Sandbox Code Playgroud)
如果您只需要文本输出,请使用自定义过滤器而不是ng-repeat
:
<span>{{Users | humanizedUserList}}</span>
Run Code Online (Sandbox Code Playgroud)
过滤器代码是这样的(使用Lodash):
app.filter('humanizedUserList', function() {
return function(users) {
var last_users = _.last(users, 2);
return _.reduce(users, function(out, user, idx, users) {
out += user.UserName;
if(user === last_users[1]) { // last entry
return out;
}
else if(user === last_users[0]) { // second to last entry
return out + ', and ';
}
else {
return out + ', ';
}
});
};
}
Run Code Online (Sandbox Code Playgroud)
您可以避免对$last
外部ng-repeat
和三元运算符的黑客使用 - 并为应用程序的其他部分添加可重用性。
归档时间: |
|
查看次数: |
40681 次 |
最近记录: |