[英]AngularJS $watch not working into object
将其放置在数组中的元素上时,我看不到它。
参见示例: http : //jsfiddle.net/zwrza551/2/
<div ng-app>
<div ng-controller="Test">
Name: <input type="text" ng-model="customer.name" />
<hr/>
<div ng-repeat="address in customer.addresses">
<input type="text" ng-model="address.name" />
<input type="text" ng-model="address.zipcode" />
<hr />
</div>
</div>
</div>
function Test($scope){
$scope.customer = {
name: 'Customer 1',
addresses: [
{ name: 'Address 1', zipcode: 123456, city: null, state: null },
{ name: 'Address 2', zipcode: 234567, city: null, state: null },
{ name: 'Address 3', zipcode: 456787, city: null, state: null },
{ name: 'Address 4', zipcode: 675684, city: null, state: null }
]
};
$scope.$watch('customer.name', function(newName, oldName){
console.log(newName);
});
$scope.$watch('address.zipcode', function(newCode, oldCode){
console.log(newCode);
//Make request to webservice, get addres for zipcode set city and state from this address.
});
}
我可以在客户端名称上,因为地址数组不起作用。
尝试这样做:
$scope.$watch('customer.addresses', function(newCode, oldCode){
for (... every address in customer.addresses) {
// check if city and state are null and do the request if it is true
}
}, true);
不要忘记打开深度监视开关。 (第3个参数为true
),该开关启用了检查angular.equals
而不是比较引用,从而使您可以观察数组中元素的变化。
Ng-repeat具有其自身的作用域,因此您不能在外部编写“ address.zipcode”。 (我的意思是,您可以编写,但这将解决另一个变量)您可以编写:
$scope.$watch('customer.addresses[0].zipcode', function(newCode, oldCode){
console.log(newCode);
});
对于所有索引来说都是一样的...但是正如前面所说,最好使用ng-change。 http://jsfiddle.net/qnb5aL1p/
您可以使用此方法解决.i:e添加多个手表,但最好与@Petr上面已经解释过的ng-change一起使用
您正在面对此问题,因为ng-repeat具有它自己的隔离范围,该范围超出了当前$ scope的范围。
for (var i = 0; i < $scope.customer.addresses.length; i++) {
$scope.$watch('customer.addresses[' + i + ']',function(newValue, oldValue) {
console.log(newValue.zipcode + ":::" + oldValue.zipcode);
}, true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.