如何在Angular指令中侦听元素的属性更改?

vdegenne

这是一个plunker,它很好地展示了我正在尝试做的事情。

我有一个指令!孤立的范围具有要更改的属性

<div ng-init="environment='natural'">
  <input ng-model=environment>
  <chameleon env="{{ environment }}"></chameleon>
</div>

我希望我的指令响应全局范围的更改:

angular.module('app', []).directive('chameleon', function () { return {

  template: 'I am {{ color }}',
  scope: {} // isolated

  ,link: function (scope, element, attrs) {

    scope.$watch('env', function () {
       scope.color = getColor();
    });

    function getColor () {
       switch (attrs.env) {
          case 'excited': return 'red';
          ...
          case 'natural':
          default: return 'green';
       }
    }

        /* here I need something similar to this not-working code :
         *   element.on('attributeChange', function () {
         *      scope.env = attrs.env
         *   });
         */
  }

}});

我知道我可以使用隔离范围来绑定周围范围的值,例如

scope: {
  env: '='
}

但是我真的需要有一个独立的组件,因为属性的值env不仅会从模型中更改。

随意分叉我的朋克。

Pankaj Parkar

您需要使用attrs.$observe与相同的功能$watch它作用于{{}}价值,价值的变化将调用该$observe函数。

attrs.$observe('env', function() {
     scope.color = getColor();
});

Demo Plunkr

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular指令侦听元素样式更改

如何在Dart中侦听对象中的Map属性更改

如何在Angular指令中将属性附加到元素

动态更改Angular指令元素属性

如何从Angular属性指令中访问元素HTML?

在Angular中,如何在指令中设置一个当属性值更改时触发的手表?

如何在Angular 2中动态更改指令

如何在templateUrl HTML内容中访问angular指令的属性

如何在Angular组件中访问规范的属性指令?

Angular.js:在指令中侦听模型更改

Angular指令从元素中删除原始属性

如何在Angular2 Typescript中更改HTML元素的readonly和required属性?

如何在 angular html 模板中动态更改 Ionic 元素的属性?

如何在Polymer中的自定义元素属性中添加事件侦听器?

AngularJS指令如何检测属性中的更改

如何在Codename One中触发属性更改侦听器

如何在vue指令中删除元素

用于按钮禁用属性更改的 Angular 5 侦听器或指令

如何从[Angular 2]中的指令检测图像对象的src属性中的更改?

如何在Angular 2中创建属性指令并将其绑定到属性?

如何在指令的attrs中监视属性

如何在Angular 2中为呈现的元素绑定事件侦听器?

如何将自定义指令属性传递给Angular 1.5中的自定义指令子元素?

如何在Angular中动态更改元素的ID?

如何在Angular中更改svg元素的颜色?

如何在Angular 2中的元素上设置属性?

Angular:在元素指令上添加属性指令

如何侦听更改的隐藏属性

如何在Rails Slim模板中的输入中添加angular属性指令?