什么是'这个'在角度装饰器中?

时间:2016-09-21 13:29:26

标签: angularjs angular-directive angular-decorator

我正在经历这个doc,我所拥有的困惑就是这个'这个'在link.apply(this,attrs)中。有人可以帮忙吗?

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

    directive.scope.fn = "&";
    var link = directive.link;

    directive.compile = function() {
      return function(scope, element, attrs) {
        link.apply(this, arguments);
        element.bind('click', function() {
          scope.$apply(function() {
            scope.fn();
          });
        });
      };
    };

    return $delegate;
   });
 });

当我尝试使用控制台调试器调试它时,'这个'链接功能正在运行时未定义。

2 个答案:

答案 0 :(得分:1)

Angular装饰器中没有特殊的this上下文,因此在松散模式下可能是window,在严格模式下可能是undefined

在嵌套函数中this可以引用非词汇上下文,它可能发生在Angular指令中:

directive.compile = function() {
  // `this` is directive DDO in compile function
  return function(scope, element, attrs) {
    // `this` is `undefined` in link function
    ...
  };
};

compile函数this中是指令DDO。在controller函数this中是控制器实例。 this函数中没有词法link

link.apply(this, arguments)是一种安全的尝试,但这只是误导。它可能是link.apply(null, arguments)

答案 1 :(得分:0)

您需要创建一个返回新链接功能的编译功能 在那里,你在旧的链接函数中调用apply(作为函数本身的第一个参数传递)来获得旧的功能 使用该集合,您只需添加额外的行为(在这种情况下,您将click事件绑定到将在单击时调用新函数的元素。)