在ng-repeat中如何获取过滤器中的$ last项?

时间:2015-07-14 16:03:37

标签: angularjs angularjs-ng-repeat

我定义了一组语言对象:

$scope.languages = [
    {'name':'English', value:'english', 'checked':true, 'available': true},
    {'name':'German', value:'german', 'checked':false, 'available': true},
    {'name':'Spanish', value:'spanish', 'checked':true, 'available': true}
];

然后我在这样的复选框中显示它们:

<div class="form-group">
    <label for="description">Languages</label>
    <div class="checkbox" data-ng-repeat="language in languages">
        <label><input type="checkbox" ng-model="language.checked">{{language.name}}</label>
    </div>
</div>

当他们检查和关闭时,我会显示如下列表:

<div class="dataRow">
    <div class="dataLabel">Languages:</div>
    <div class="dataValue text-success" data-ng-repeat="language in languages">
        <span ng-if="language.checked">{{language.name + ($last ? '' : ',')}}</span>
    </div>
    <div class="clear"></div>
</div>  

只要选择了最后一种语言,就不会显示最终的逗号。但如果未选择最后一种语言(西班牙语),则会错误地显示最终的逗号。

而不是$last我需要像$last(isChecked)这样的东西。我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以通过在ng-repeat中添加过滤器来仅对已检查的项目进行迭代,如下所示:

<div class="dataRow">
    <div class="dataLabel">Languages:</div>
    <div class="dataValue text-success" data-ng-repeat="language in languages | filter: {checked: true}">
        {{language.name + ($last ? '' : ',')}}
    </div>
    <div class="clear"></div>
</div>  

这样你知道最后一个元素被检查了。

这是一个工作小提琴http://jsfiddle.net/q7ch1ysh/

答案 1 :(得分:0)

只需在三元组中指定:

fa-minus

答案 2 :(得分:0)

试试这个:

<div class="dataValue text-success" data-ng-repeat="language in languages track by $index">
    <span ng-if="language.checked">{{language.name + (($index==languages.length && language.checked) ? '' : ',')}}</span>
</div>