2015-05-14 144 views
0

深入关注大型对象的性能杀手 - 所以我希望能够将动态对象/属性传递到参数watchExpression $ scope。$ watch函数,每当你调用一个改变该特定对象或属性的动作。

我也有一堆不同的物体,不想为所有物体设置手表。

例如:

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()里面不断地看$范围。$手表的watchExpression

如果是这样的话,是否有任何创造性的事情可以做,返回从一个值watchExpression这需要外部参数,而不是显式地声明内$scope.$watchwatchExpression对象?

感谢一束!

EDIT附加清晰度 - 我使用$scope.$watch吨o每当当前范围的值发生更改时,将$scope.$broadcast的值设置为另一个范围。

+1

我很困惑。如果你知道某些事情正在改变(比如,用'ng-change'),那么你不需要$ watch。你究竟在努力实现什么?什么是用例? –

+0

好点! - 略微推翻了......: - 我在底部更新了一个编辑问题。谢谢。 –

+0

好的,但现在为什么你需要重新分配观看的表达式? –

回答

1

由于$scope.$watchdocumentation状态watchExpression被称为多次(即使在一个摘要循环中),但是如果您在那里传递了对象并且您将此对象更改为另一个,那么它将不起作用。这就是为什么传递字符串watchExpression

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

或更改什么是内部对象。

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

也许值得在你的文章中明确提到''$ scope。$ watch''也支持嵌套对象监视,也就是''scope.watch('object.nestedobject.property',function(){...} )'' – tiblu