angular如何访问动态多级数据?

时间:2015-06-02 08:17:20

标签: javascript angularjs

我有一些数据需要通过ngRepeat进行循环并动态访问数据,这些数据可能位于顶层或嵌套在几个级别。

但是,似乎我可以显示顶级属性,但不能在嵌套时显示。

JS:

var mapping = [
    {property:'a'}, // works
    {property:'b.c1'}, // doesn't work
    {property:'b.c2'}  // doesnt work
];

var arr = {
    a: 'text',
    b: {
        c1: 'text2',
        c2: 'text3'
    }
};

HTML:

<div ng-repeat="mappingItem in mapping">
    <p>{{arr[mappingItem.property]}}</p>
</div>

3 个答案:

答案 0 :(得分:1)

您可以使用angular $parse服务来评估arr的表达式:

$scope.map = function(property) {
    return $parse(property)(arr);
};

<div ng-repeat="mappingItem in mapping">
    <p>{{map(mappingItem.property)}}</p>
</div>

http://plnkr.co/edit/tPYcyT4HhqaepJZl0kd8?p=preview

答案 1 :(得分:0)

我怀疑你的方法会奏效。原因是您尝试访问该对象的方式不正确,即:arr[mappingItem.property]将变为arr['b.c1'],但您的对象没有密钥'b.c1'。 @ DivyaMV的建议无效,因为b中的属性mapping不是对象,因此它没有密钥c1。我建议您更改对象的结构,更改您尝试访问对象的方式,即使用ng-if检查多个级别, OR 而不是循环,逐个显示属性

答案 2 :(得分:0)

如果您使用{“property”:“b”,“chiled”:“c1”}结构类型,那么它可以工作。

var mapping = [
    {property:'a'}, 
    {"property":"b","chiled":"c1"},// works
    {property:'b.c2'}  
];

 <div ng-repeat="mappingItem in mapping">
    <p>{{arr[mappingItem.property][mappingItem.chiled]}}</p> <!-- it works for second object-->
 </div>