什么是'this'在angular装饰器中



我正在浏览这个文档,我的困惑是链接中的'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;
   });
 });

当我尝试使用控制台调试器调试它时,'this'是未定义的,而链接函数正在运行

在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是控制器实例。link函数中没有词法this

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

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

相关内容

  • 没有找到相关文章

最新更新