AngularJS — 将 object/object 属性 传递给 $scope.$watch

AngularJS — Passing object/object property to be $watched into $scope.$watch

对大型对象的深度观察是性能杀手——所以我希望能够将动态 object/property 传递到 $scope.$watch 函数的 watchExpression 参数中,只要你调用更改该特定对象或 属性 的操作。

我还有一堆不同的对象,不想为所有对象设置手表。

例如:

var watchingFunction = function (objectToBeWatched) {
    $scope.$watch(function (objectToBeWatched) {return objectToBeWatched;}, function(newValue, oldValue) {
        if (newValue !== oldValue) {...};
}, true);

$scope.object = true;
$scope.changeMyObject = watchingFunction(object);

HTML

<input type="checkbox" ng-model="object" ng-change="changeMyObject()">

我认为这行不通,因为调用函数 watchingFunction() 只运行 $scope.$watch() 一次?就好像你在 $scope 上定义了 $scope.$watch(而不是包裹在 watchingFUnction() 中,它不断地观察 $scope.$watch 的 watchExpression

如果是这种情况,您是否可以对 return 来自 watchExpression 的值做一些有创意的事情,它采用外部参数而不是在 $scope.$watch 中显式声明对象的watchExpression

非常感谢!

EDIT 额外的清晰度——我正在使用 $scope.$watch 使 $scope.$broadcast 每次当前范围的值发生变化时都指向另一个范围.

As $scope.$watch documentation 指出 watchExpression 被多次调用(即使在一个摘要循环中),但是如果您将对象传递到那里并将此对象更改为另一个对象,那么它将不行。这就是为什么最好传递字符串 watchExpression

$scope.$watch('object', function() {...} )

或更改对象内部的内容。

<input type="checkbox" ng-model="object.value" ng-change="changeMyObject()">