【问题标题】:AngularJS Comma separated for JSON formatAngularJS逗号分隔JSON格式
【发布时间】:2014-12-19 06:21:46
【问题描述】:

我对用ng-repeatng-if 分隔的逗号有疑问。

我想让结果以逗号分隔,但最后一项也包括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是和查找表join,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

【问题讨论】:

    标签: json angularjs angularjs-ng-repeat


    【解决方案1】:

    您的实际 $last (FFF) 未呈现,因为它具有 HasChecked: false,因此您看到的最后一个逗号 "," 是为 EEE 呈现的。

    要实现您想要的,您需要先过滤 HasChecked: false,以便 $last 应用于过滤后的数组:

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

    plunker

    【讨论】:

    • 我通过添加 1 个过滤器解决了这个问题,但您的回答也帮助我考虑了 HasChecked 的过滤器
    • 您的建议 有效。
    【解决方案2】:

    我通过添加一个过滤器来实现结果:

    <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;
    };
    

    【讨论】:

    • 我忘记了您的其他过滤器 - 已将其添加到答案中
    猜你喜欢
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多