Angularjs动态地将值添加到$ watch

时间:2013-12-25 18:42:40

标签: angularjs

出于某种原因我无法工作$ watch动态改变数组

$scope.a1 = 1;
$scope.a2 = 2;

$scope.q = [$scope.a1, $scope.a2];
$scope.$watch('q', function(newVal) {
  alert(newVal);
}, true);
变化没有任何反应。错误我在初始化时收到警报。

http://jsfiddle.net/qwertmax/FtLH8/

这只是我项目的一个例子,我必须“观察”多个值(输入字段)。该字段由json请求自动生成。

所以,我注意帮助动态地将值添加到“$ watching”

3 个答案:

答案 0 :(得分:2)

这就是我解决这个问题的方法:

由于您将自动生成字段,因此我假设您获得了一系列可能的输入。然后,您可以自动创建输入字段并绑定它们。然后,您可以观看该阵列。有点像这样:

function TodoCtrl($scope) {
    $scope.inputs = [{
        label: "First Input",
        value: "Default Value"
    }, {
        label: "First Input",
        value: "Default Value"
    }]
    $scope.$watch("inputs", function (newVal) {
        alert("Changed an input");
    }, true);
}

HTML:

 <div ng-repeat="inpt in inputs">
     <label>{{inpt.label}}</label>
     <input type="text" ng-model="inpt.value">
 </div>

答案 1 :(得分:1)

问题是将变量放在数组中不会创建对原始变量的引用,因为原始数据是基元。因此,当您更新ng-model绑定的变量

时,您的数组中的数组永远不会更改并且您首先放入其中的值保持不变

你可以将ng-model绑定到数组(即ng-model=q[0]),但在ng-model中使用angular是一个很好的规则,在<{1}}中有意味着你使用的是对象而不是原语

此演示展示了您的阵列永远不会改变的方式:

http://jsfiddle.net/FtLH8/6/

答案 2 :(得分:0)

$ scope。$ watchCollection()?

http://docs.angularjs.org/api/ng。$ rootScope.Scope

听起来像是为它做的