由于angular ng-repeat只能写在标签上 循环对象的对象时遇到的问题及解决方法

    对象数据结构

$scope.obj = {
    "section1":{
        "category1":{
            "key1":"value1",
            "key2":"value2"
        },
        "category2":{
            "key1":"value3",
            "key2":"value4"
        }
    },
    "section2":{
        "category3":{
            "key1":"value5",
            "key2":"value6"
        }
    }
    ...
};

    

    ng-repeat循环时的结构

<ul ng-repeat="(key,value) in obj">
    <li ng-repeat="(subkey,subValue) in value" >
        {{key}}
        {{subkey}}
        {{subValue.key1}}
        {{subValue.key2}}            
    </li>
</ul>

    

    这样循环输出的结果

<ul>
    <li>
        section1
        category1
        value1
        value2
    </li>
    <li>
        section1
        category2
        value3
        value4
    </li>
</ul>
<ul>
    <li>
        section2
        category3
        value5
        value6
    </li>
</ul>


而我希望的结果是li在一个ul中循环,这样可以避免当li的个数为奇数时,产生的布局问题。


最后解决的方法是改造对象,将它生成为一个新的数组进行循环。

$scope.buildData = function(){
    var newArr = [];
    angular.forEach($scope.obj,function(value,key){
         angular.forEach(value,function(subvalue,subkey){
             newArr.push({
                 "section": key,
                 "category": subkey,
                 "key1":subvalue["key1"],
                 "key2":subvalue["key2"]
             }) 
         });
    });
    return newArr;
};
$scope.newObj =  $scope.buildData();

//新的循环方法
<ul>
    <li ng-repeat="data in newObj ">
        {{data.section}}
        {{data.category}}
        {{data.key1}}
        {{data.key2}}
    </li>
</ul>


转载于:https://my.oschina.net/shawnSongxiaoqiang/blog/649935

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值