2016-01-18 3 views
0

Я смотрел онлайн, но не смог ничего на нем нарисовать. Кто-нибудь знает, если есть так или иначе, чтобы вернуть $ watch только объект, у которого изменилось одно из его свойств.

В настоящее время он просматривает массив объектов, чтобы при изменении определенного свойства он обновлял объект другого массива. Прямо сейчас я повторяю старые и новые массивы, которые $ watch возвращаются и проверяют, что изменилось. Кажется расточительным, и с большими массивами данных я ожидаю не то, что я бы предпочел.

ответ

1

От AngularJS docs:

$watch(watchExpression, listener, [objectEquality]):

  • watchExpression - выражение, которое вычисляется на каждые $ переваривать цикл. Изменение возвращаемого значения вызывает вызов слушателю

  • listener - обратный вызов, вызываемый при изменении значения watchExpression; function(newVal, oldVal, scope); PARAMS:

    • newVal содержит текущее значение watchExpression
    • oldVal содержит предыдущее значение watchExpression
    • scope относится к текущей области
  • objectEquality - сравните для объекта равенства, используя угловые.равнения вместо сравнения для эталонного равенства

Итак, вы можете передать в свои функции параметры newVal и oldVal и проверить, какой объект из массива выскочил/вложил.

Надеюсь, что поможет

+0

Да, я смотрел на эти параметры, но надеялся, что их не будет. – DimlyAware

0

попробуйте этот трюк.

$scope.$watch('myArray.length', function(){ 
    console.log("My array has changed",$scope.myArray); 
}); 
+0

Благодарим вас за отзыв. Он не следит за добавлением нового объекта, а скорее для одного из объектов, для которого было обновлено одно из его свойств, т.е. [{val: 1}, {val: 1}], а первый объект get обновил его значение до 2 Я бы посмотрел на часы, чтобы вернуть индекс объекта, который был обновлен. – DimlyAware