javascript - 如何使用 Angular 的装饰器模式来增强指令的链接功能?

标签 javascript angularjs angular-directive

我正在研究 Angular 库并寻找一种使用装饰器模式扩展指令的方法:

angular.module('myApp', []).decorator('originaldirectiveDirective', [
  '$delegate', function($delegate) {

    var originalLinkFn;
    originalLinkFn = $delegate[0].link;

    return $delegate;
  }
]);

使用此模式扩充原始指令的最佳方式是什么? (示例用法:在不直接修改其代码的情况下对指令进行额外的监视或额外的事件监听器)。

最佳答案

您可以很容易地修改或扩展指令的 controller。如果它是 link 您正在寻找(如您的示例所示),那么它并没有那么难。只需在config阶段修改指令的compile函数。

例如:

HTML 模板

<body>
  <my-directive></my-directive>
</body>

JavaScript

angular.module('app', [])

  .config(function($provide) {
    $provide.decorator('myDirectiveDirective', function($delegate) {
      var directive = $delegate[0];

      directive.compile = function() {
        return function(scope) {
          directive.link.apply(this, arguments);
          scope.$watch('value', function() {
            console.log('value', scope.value);
          });
        };
      };

      return $delegate;
    });
  }) 

  .directive('myDirective', function() {
    return {
      restrict: 'E',
      link: function(scope) {
        scope.value = 0; 
      },
      template: '<input type="number" ng-model="value">'
    };
  });

现在您已经装饰了 myDirective 以在 value 更改时记录它。

相关插件在这里 https://plnkr.co/edit/mDYxKj

关于javascript - 如何使用 Angular 的装饰器模式来增强指令的链接功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206180/

相关文章:

javascript - 将对象传递给 Angular 指令的 '&' 父作用域函数

javascript - 需要一个 javascript 或 jquery 库来将 xpath 转换为 jquery 中可选择的 CSS3 格式

angularjs - 将对象作为 ng-map 标记的一部分传递

angular - 是否可以像我们在 angular 2 中测试属性指令那样对结构指令进行单元测试

javascript - 如何在全局 JavaScript 变量等于某个值时触发 Google 跟踪代码管理器事件

javascript - AngularJS ng-repeat 不重复

javascript - 仅当不在 div 中时才需要运行指令

javascript - grunt-contrib-htmlmin 如何忽略模板标签

javascript - 如何使用php接收通知(远程发布)并运行javascript?

javascript - 为什么在这里 Append 起作用而 Add 不起作用?