AngularJS - 将对象/对象属性传递给$ scope。$ watch

时间:2015-05-14 07:58:04

标签: javascript angularjs angularjs-scope angularjs-controller

在大型对象上深入观察性能杀手 - 所以我希望能够将动态对象/属性传递到$ 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.$watch上定义$scope一样(而不是包裹在watchingFUnction()内,它会不断地关注$ scope。$ watch&#39; s watchExpression

如果是这种情况,您是否可以执行任何创造性的操作来从watchExpression返回一个值,该值采用外部参数,而不是在$scope.$watch&#39; s {watchExpression {1}}?

非常感谢!

编辑其他清晰度 - 我每次使用当前范围的值更改时$scope.$watch使$scope.$broadcast到另一个范围。

1 个答案:

答案 0 :(得分:1)

由于$scope.$watch documentation状态watchExpression被多次调用(即使在一个摘要周期中),但是如果你在那里传递了对象而你将这个对象更改为另一个,那么它将无法工作。这就是为什么最好传递字符串watchExpression

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

或更改对象内部的内容。

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