2014-11-14 2 views
0

У меня есть 2 многопозиционных списка в угловом, которые зависят от другого. Один из них - это родительский список, а один - дочерний список. При посадке в списке дочерних элементов ничего нет, и как только вы выберете (один или несколько) элементов из родительского multi-select, он затем заполнит дочерний список дочерними элементами выбранных элементов из родительского списка. Это отлично работает - только для справки. У меня есть $ watch на родительской модели, поэтому, когда она изменяется (пользователь выбирает что-то в родительском списке, он затем вызывает $ http и выводит результаты для списка детейУгловая, сравнивая 2 объекта и их заменяя (возможно, увязывая?)

как так -

$scope.$watch('selectedResources', function (newValue) { 
angular.forEach($scope.selectedResources, function(data){ 
       $scope.generalIDArray.push(data.id); 
      }); 
      //id's = $scope.imageIDArray 
      //place new data in $scope.imageOptionsSub 
      $http({ 
        method: 'POST', 
        url: '/listSubCategories', 
        data: { 
         page: 0, 
         ids: $scope.generalIDArray 
        } 
       }) 
      .success(function(data){ 
       //empty options 
       $scope.resourceOptionsSub = []; 
       //push new data in 
       angular.forEach(data.subCategories, function(index) { 
        $scope.resourceOptionsSub.push(index); 
       }); 
      }); 

Итак - я толкаю все идентификаторы и отправить их, чтобы получить результаты обратно

Однако -.. вот моя проблема, я понял, после попытки этого, что я не хочу полностью заменить resourceOptionsSub всеми новыми результатами, поскольку пользователь взаимодействует с результатами дочернего процесса - у них есть значение .checked на них, что означает пользователь выбрал их, это будет уничтожено и обновлено каждый раз, когда я делаю новый вызов, потому что он освобождает область и заменяет ее, даже если это те же элементы.

Что бы я хотел, чтобы произошло сравнение, если есть элементы, которые уже существуют в resourceOptionsSub, которые входят с вызовом, и вроде сохранить исходный ресурсOptionsSub и сравнить его с новым, входящим, и возможно, снять предметы, которые больше не существуют?

Я думаю, что мне нужно как-то сравнить 2 объекта 1, являющихся оригиналом, 2 - новым, - и если 2 имеет что-либо 1, то не вытащить его из 1, потому что тогда я мог бы хранить предметы, которые такие же нетронутые. Если бы кто-нибудь мог указать мне в правильном направлении здесь, где искать, я бы это оценил, так как я немного потерял, как справиться с этим. Спасибо за прочтение!

ответ

2

angular.extend будет работать, но вам нужно будет начать с пустым объектом следующим образом:

var updatedObj = angular.extend({}, obj1, obj2); 
+0

Угловыми всегда поражает меня, как просто это делает вещи, спасибо! – ajmajmajma

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