AngularJS:观察对象数组中的特定属性,以获取属性值的更改
发布时间:2020-12-17 07:17:03 所属栏目:安全 来源:网络整理
导读:在我的自定义指令中,我根据数据源数组中的对象数量向DOM添加元素.我需要在每个对象中观察特定属性.当我将这些元素添加到DOM时,我想在toppings数组中的每个对象的checked属性上设置$watch,但它不起作用,我不知道为什么.我在函数内部设置了一个断点,当属性从tr
在我的自定义指令中,我根据数据源数组中的对象数量向DOM添加元素.我需要在每个对象中观察特定属性.当我将这些元素添加到DOM时,我想在toppings数组中的每个对象的checked属性上设置$watch,但它不起作用,我不知道为什么.我在函数内部设置了一个断点,当属性从true变为false或false变为true时应该调用该断点,但永远不会调用该函数.原因很明显吗?我只是在学习Angular,所以我很容易犯一个愚蠢的错误.
$scope.bits = 66; (i.e. onions and olives) $scope.toppings = [ { topping: 1,bits: 2,name: 'onions' },{ topping: 2,bits: 4,name: 'mushrooms' },{ topping: 3,bits: 8,name: 'peppers' },{ topping: 4,bits: 16,name: 'anchovies' },{ topping: 5,bits: 32,name: 'artichokes' },{ topping: 6,bits: 64,name: 'olives' },{ topping: 7,bits: 128,name: 'sausage' },{ topping: 8,bits: 256,name: 'pepperoni' } ] 模型中的每个对象都会获得一个新的checked属性,该属性为true或false. 注意:对象数组最多包含十几个项目.性能不是问题. link: function link(scope,iElement,iAttrs,controller,transcludeFn) { <snip> // At this point scope.model refers to $scope.toppings. Confirmed. angular.forEach(scope.model,function (value,key) { // bitwise: set checked to true|false based on scope.bits and topping.bits scope.model[key].checked = ((value.bits & scope.bits) > 0); scope.$watch(scope.model[key].checked,function () { var totlBits = 0; for (var i = 0; i < scope.model.length; i++) { if (scope.model[i].checked) totlBits += scope.model[i].bits; } scope.bits = totlBits; }); }); <snip> 解决方法
$scope.$watch的watchExpression参数应该是字符串或函数.我没有对此进行过广泛的实验(尽可能避免使用显式手表),但我认为当你将“简单”的范围属性作为对象引用时,它也会起作用,但对于更复杂的引用则不太好.
我想如果你提供引用作为字符串,例如’model [‘key’] .checked’那么你可能会有一些成功(我只说这个因为我之前用$watchCollection做了类似的事情). 或者,你应该能够提供一个功能,例如 $scope.$watch(function(){return scope.model [key] .checked;},function(){…}); 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |