2013-08-22 4 views
1

У меня есть сфера, как показано нижекак обновить элементы, содержащие отношение

$scope.phones = [ 
    { 
     id: 4, 
     name: "nokia", 
     accessories: [ 
      {id: 1, name: "headset"}, 
      {id: 3, name: "keyboard"}, 
      {id: 5, name: "charger"} 
     ] 
    }, 
    { 
     id: 5, 
     name: "samsung", 
     accessories: [ 
      {id: 5, name: "charger"} 
     ] 
    }, 
    { 
     id: 6, 
     name: "iphone", 
     accessories: [ 
      {id: 1, name: "headset"}, 
      {id: 5, name: "charger"} 
     ] 
    } 
]; 

Например, они отображаются как

-> Phone name 
    -> accesories 

Теперь мой случай

Если я обновлю аксессуар, который в связи с phone Я хочу обновлять записи, которые отображаются, но только те, которые связаны с обновленным аксессуаром. Я не хочу обновлять весь вид действия, но только записи, связанные с обновленным аксессуаром.

Как это сделать?

// редактировать

Я создал ручной обходной

$scope.editAcc = function (idx) { 
      for(var i = 0; i < $scope.phones.length; i++) { 
       var tmpPhone = $scope.phones[i]; 
       for(var j = 0; j < tmpPhone.accessories.length; j++) { 
        var acc = tmpPhone.accessories[j]; 
        if(acc.id == idx) { 
         acc.name = acc.name + " Z"; 
        } 
       } 
      } 

// вар акк = $ scope.accessories [IDX]; // acc.name = acc.name + "X"; };

Но ИМО должна быть некоторая функция, чтобы сделать это

ответ

1

Я не думаю, что есть встроенный способ обновить значение по пути JSON, но вы можете по крайней мере использовать angular.forEach() Переберите коллекции :

$scope.editAcc = function (idx) { 
    angular.forEach($scope.phones, function (t) { 
     angular.forEach(t.accessories, function(acc){ 
      (acc.id == idx) ? (acc.name += " Z") : null; 
     }); 
    }); 
} 

DEMO

+0

чем разница? loop - это цикл – Fixus