2014-12-19 39 views
2

我有一个问题,用逗号分隔ng-repeatng-ifAngularJS逗号分隔为JSON格式

我想以逗号分隔结果,但最后一项还包括comma

我的期望是:AAA, CCC, EEE

但产量即将为:AAA, CCC, EEE,

ng-repeat块如下:

<div ng-repeat="provider in providersInfo"> 
    <span ng-repeat="policy in policiesInfo | filter:{ProviderId : provider.ProviderId }:true"> 
     <span ng-if="policy.HasChecked">{{ policy.PolicyName }}{{$last ? '' : ', '}}</span> 
    </span> 

    <!-- or --> 

    <span ng-repeat="policy in policiesInfo | filter:{ProviderId : provider.ProviderId }:true"> 
     <span ng-if="policy.HasChecked">{{$index == 0 ? '' : ', '}}{{ policy.PolicyName }}</span> 
    </span> 
</div> 

这里,policiesInfo是查找表,输出加入的JSON格式是:

对于每个ProviderId它会包含6个查找记录:

policiesInfo = [ 
    {PolicyId : 1, PolicyName: 'AAA', ProviderId: 25, HasChecked: true }, 
    {PolicyId : 2, PolicyName: 'BBB', ProviderId: 25, HasChecked: false }, 
    {PolicyId : 3, PolicyName: 'CCC', ProviderId: 25, HasChecked: true }, 
    {PolicyId : 4, PolicyName: 'DDD', ProviderId: 25, HasChecked: false }, 
    {PolicyId : 5, PolicyName: 'EEE', ProviderId: 25, HasChecked: true }, 
    {PolicyId : 6, PolicyName: 'FFF', ProviderId: 25, HasChecked: false } 
] 

这里$last被考虑为PolicyId : 6$index被认为是PolicyId : 1

回答

4

您的实际$最后(FFF)不会被渲染,因为它有HasChecked: false,所以最后一个逗号","你”重新看到是为EEE渲染的。

达到你想要你需要筛选出第一HasChecked: false,是什么使得$去年将适用于过滤数组:

<span ng-repeat="policy in policiesInfo | filter: {HasChecked: true, ProviderId: provider.ProviderId}"> 
    {{policy.PolicyName}}<span ng-if="!$last">,</span> 
</span> 

plunker

+0

我解决了这个问题,增加了1个过滤器,但你的回答也帮助我也想到了关于** HasChecked的过滤器** – Arulkumar 2014-12-19 07:21:51

+0

您的建议正在工作。 – Arulkumar 2014-12-19 07:32:19

1

我所取得的结果通过再加一个过滤器:

<span ng-repeat="policy in policiesInfo | filter:{ProviderId : provider.ProviderId }:true | filter: checkedPolicies"> 
    <span>{{ insurancepolicy.PolicyTypeName }}{{$last ? '' : ', '}}</span> 
</span> 

$scope.checkedPolicies = function(policyItem) { 
    return policyItem.HasChecked; 
}; 
+0

我忘了你的其他过滤器 - 将它添加到答案 – 2014-12-19 07:21:20