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()">
对大型对象的深度观察是性能杀手——所以我希望能够将动态 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()">