DimlyAware
DimlyAware

Reputation: 443

$watch and object array

I was looking online but was unable to turn up anything on it. Does anyone know if there is anyway to have $watch return only the object which had one of its properties change.

Currently having it watch an array of objects so that when a specific property changes it then updates another array's object. Right now i'm iterating through the old and new arrays that $watch passes back and checking to see what changed. Seems wasteful and with the large arrays of data i'm expecting not something i'd prefer.

Upvotes: 0

Views: 170

Answers (2)

Andrew
Andrew

Reputation: 1534

From AngularJS docs:

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

  • watchExpression - expression that is evaluated on each $digest cycle. A change in the return value triggers a call to the listener

  • listener - callback called whenever the value of watchExpression changes; function(newVal, oldVal, scope); params:

    • newVal contains the current value of the watchExpression
    • oldVal contains the previous value of the watchExpression
    • scope refers to the current scope
  • objectEquality - compare for object equality using angular.equals instead of comparing for reference equality

So you could pass in your function newVal and oldVal params and check what object from array is popped up/pushe into.

Hope that helps

Upvotes: 1

try with this trick.

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

Upvotes: 0

Related Questions