【问题标题】:angular How to access dynamic multiple level data?角度如何访问动态多级数据?
【发布时间】:2015-06-02 08:17:20
【问题描述】:

我想使用 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>

【问题讨论】:

  • 你试过了吗? var mapping = [ {property:'a'}, {property:'b['c1']'}, {property:'b.['c2']'} ];
  • @DivyaMV 刚试了没用
  • 如果你使用 arr['b.c1'] 它不会工作,但如果你使用 arr['b'].c1 那么它工作
  • 如果不能更改结构,这可能会有所帮助stackoverflow.com/questions/6906108/…

标签: javascript angularjs


【解决方案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

【讨论】:

  • 谢谢,这正是我所需要的!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果你使用 {"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>
    

    【讨论】:

    • 这不会为第一个对象返回 undefined 吗?
    • 是的,我实际上给出了嵌套 json 迭代的示例,所以只有第二个对象可以工作,它只是一个简单的迭代嵌套 json 示例,所以由你决定我如何构建你的 json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多