AngularJS Notify $ watchCollection改变了$ watch手表的型号

时间:2014-02-07 06:37:55

标签: javascript angularjs angularjs-scope watch

我有一个$ 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?)?

1 个答案:

答案 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

    });
}]);