2015-05-14 143 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