2015-06-02 2 views
0

У меня есть некоторые данные, которые я хотел бы пропустить с помощью 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> 
+0

сделал ли вы это? var mapping = [ {property: 'a'}, {property: 'b [' c1 ']'}, {property: 'b. [' c2 ']'} ]; –

+0

@DivyaMV только что пробовал и не работает – muudless

+0

если вы используете arr ['b.c1'], он не будет работать, но если вы используете arr ['b']. C1, то он работает –

ответ

1

Вы можете использовать $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

+0

Спасибо, это именно то, что мне нужно! – muudless

0

Я сомневаюсь, ваш подход будет работать. Причина, по которой вы пытаетесь получить доступ к объекту, неверна, то есть: arr[mappingItem.property] станет arr['b.c1'], но ваш объект не имеет ключа 'b.c1'. @ Предложение DivyaMV не будет работать либо потому, что свойство b в mapping не является объектом, следовательно, он не имеет ключа c1. Я хотел бы предложить вам либо изменить структуру вашего объекта ИЛИ изменить, как вы пытаетесь получить доступ к объекту, т.е. использовать ng-if для проверки нескольких уровней, ИЛИ вместо зацикливания, отобразить свойства по одному

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> 

+0

Не будет ли это возвращать 'undefined' для первого объекта ? –

+0

да, я действительно привел пример для вложенной итерации json, так что только второй объект работает просто как простой пример итерации, вложенной json, поэтому на вас решил, как я построю ваш json –

Смежные вопросы