我正在经历这个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;
});
});
当我尝试使用控制台调试器调试它时,'这个'链接功能正在运行时未定义。
答案 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事件绑定到将在单击时调用新函数的元素。)