加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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(){…});

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读