0

У меня есть массив дерева, как это:

Array 
(
    [attributes] => Array 
     (
      [attribute_group_id_6] => Array 
       (
        [id] => 6 
        [name] => Processor 
        [items] => Array 
         (
          [0] => Array 
           (
            [product_id] => 40 
            [attr_id] => 1 
            [attr_text] => demo 
            [attr_group_id] => 6 
            [attr_group_order] => 1 
            [attr_group_name] => Processor 
           ) 

          [1] => Array 
           (
            [product_id] => 28 
            [attr_id] => 2 
            [attr_text] => 10 
            [attr_group_id] => 6 
            [attr_group_order] => 5 
            [attr_group_name] => Processor 
           ) 

          [2] => Array 
           (
            [product_id] => 28 
            [attr_id] => 3 
            [attr_text] => 777 
            [attr_group_id] => 6 
            [attr_group_order] => 3 
            [attr_group_name] => Processor 
           ) 

         ) 

       ) 

     ) 
    ) 

И цель состоит в том, чтобы wathc items.[N].product_id изменения.

Этот код может видеть изменения, но он видит все 3 изменения одновременно.

$scope.$watch('filterData.attributes.items', function(val, old) { 
    console.log('watch'); 
}, true); 

console: 
watch 
watch 
watch 

Значение изменяется с помощью текстового поля:

есть проблемы качества - как смотреть только одно изменения? (attributes.attribute_group_id_6.items.[N].product_id)

+0

Непонятная вещь: есть ли 3 изменения или только одно изменение срабатывало несколько раз? – ABOS

ответ

0

Ваши триггеры обратного вызова для каждого изменения всего items Массив. То, что вам необходимо, - это слушатель для каждого отдельного элемента, который вы можете создать в цикле - хотя JSHint может это не понравиться.

for (var i = 0; i < $scope.filterData.attributes.items.length; i++) { 
    $scope.$watch('filterData.attributes.items[' + i + ']', function(val, old) { 
    console.log('watch'); 
    }, true); 
} 
Смежные вопросы