我有一个$ watch监听输入,调用服务来获取一些新数据。 $ watchCollection还需要返回数据。
如何通知$ watchCollection $ watch已经发生(从而更新范围)
我的HTML
<div ng-controller="MainCtrl">
<p>A: <input type="text" ng-model="input"></p>
<p>B: <input type="text" ng-model="output"></p>
</div>
我的JS
angular.module('testapp', [])
.controller('MainCtrl', ['$scope', function($scope) {
$scope.$watch('input', function(newVal, oldVal){
//go get some data from a service...
var reallyNewVal = Date.now();
$scope.input = reallyNewVal;
});
$scope.$watchCollection('[output]', function(output){
//watch this, plus some other stuff too, omitted for simplicity
$scope.output = $scope.input - 1391754634457;
});
}]);
JSfiddle示例:http://jsfiddle.net/gC7Zr/
我正在寻找的是当$ scope.input更改时(由于$ watch),$ watchCollection也会更新。 我不想将$ scope.input放入$ watchCollection中,因为它会消耗XHR请求。
有什么想法吗?
修改
这是我正在尝试做的另一个例子:http://jsfiddle.net/n46rj/
当您更改B时,C会更新。但是,如果更改A,则C不会更新。当$ watch被调用时,如何强制$ watchCollection'更新'($ digest?)?
答案 0 :(得分:0)
由于输出仅取决于输入,您可以在第一个$watch
angular.module('testapp', [])
.controller('MainCtrl', ['$scope', function($scope) {
$scope.$watch('input', function(newVal, oldVal){
//go get some data from a service...
var reallyNewVal = Date.now();
$scope.input = reallyNewVal;
$scope.output = $scope.input - 1391754634457;
});
$scope.$watchCollection('[output]', function(output){
//watch some other stuff
});
}]);