Issue
For watching an object scope variable, is $scope.$watch with objectEquality set to true OR $scope.$watchCollection better?
For a $scope object variable (like 15 attributes, some nested 2 levels deep) updated with input elements and ng-model in the view, how bad is $scope.$watch with objectEquality set to true? Is this a big thing to avoid?
Is $watchCollection a better solution?
I am looking for easy wins to improve performance on my AngularJS App (I'm still stuck on v1.2.2).
  // ctrl scope var
  $scope.filters = {
    name: '',
    info: {test: '', foo: '', bar: ''},
    yep: ''
    // etc ...
  }
  // ctrl watch ?
  $scope.$watch('filters', function(newVal, oldVal) {
    if(newVal !== oldVal) {
      // call with updated filters
    }
  }, true);
  // or ctrl watch collection ?
  $scope.$watchCollection('filters', function(newVal, oldVal) {
    if(newVal !== oldVal) {
      // call with updated filters
    }
  });
  // view input with ng-model
  <input type="text" ng-model="filters.name" />
  <input type="text" ng-model="filters.info.test" />
  <input type="text" ng-model="filters.yep" />
  // etc ...  
                            Solution
The
$watchCollection()function is a sort-of mid-ground between the two$watch()configurations above. It's more in-depth than the vanilla $watch() function; but, it's not nearly as expensive as the deep-equality$watch()function. Like the$watch()function, the$watchCollection()works by comparing physical object references; however, unlike the$watch()function, the$watchCollection()goes one-level deep and performs an additional, shallow reference check of the top level items in the collection.
Answered By - Narek Mamikonyan
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.