AngularJS $watch vs $watchCollection: which is better for performance?

前端 未结 3 2024
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-30 19:46

For watching an object scope variable, is $scope.$watch with objectEquality set to true OR $scope.$watchCollection better?

For

3条回答
  •  盖世英雄少女心
    2020-11-30 20:29

    $watch() will be triggered by:

    $scope.myArray = [];
    $scope.myArray = null;
    $scope.myArray = someOtherArray;
    

    $watchCollection() will be triggered by everything above AND:

    $scope.myArray.push({}); // add element
    $scope.myArray.splice(0, 1); // remove element
    $scope.myArray[0] = {}; // assign index to different value
    

    $watch(..., true) will be triggered by EVERYTHING above AND:

    $scope.myArray[0].someProperty = "someValue";
    

    JUST ONE MORE THING...

    $watch() is the only one that fires when an array is replaced with another with the same exact content. For example:

    $scope.myArray = ["Apples", "Bananas", "Orange" ];
    
    var newArray = [];
    newArray.push("Apples");
    newArray.push("Bananas");
    newArray.push("Orange");
    
    $scope.myArray = newArray;
    

    Below is a link to an example JSFiddle that uses all the different watch combinations and outputs log messages to indicate which "watches" were triggered:

    http://jsfiddle.net/luisperezphd/2zj9k872/

提交回复
热议问题