[英]Getting directive name in AngularJS
我有一个Angular指令。 在link
函数中,我这样做:
link: function(scope, element, attrs) {
...
element.data('startY', value);
...
}
我想做的是使用指令名称加上前缀'startY'
,而无需对名称进行硬编码。 我想动态获取名称。
有什么办法吗? Angular是否提供一种反映方式? 就像是:
link: function(scope, element, attrs) {
...
element.data(this.$name + '-startY', value);
...
}
如果不是,那么为避免冲突而选择data()
键的推荐最佳实践是什么?
如AngularJS源代码所示 ,在您的指令选项所在的对象文字的上下文中分配指令的名称。 但是,链接函数无法访问对象文字的上下文this
,因为它将被传递到编译函数,在编译过程完成后,该函数将被返回并调用该函数。
要在链接函数中获取名称,可以遵循以下任何建议:
[1]创建一个变量,该变量可以包含对对象文字的引用(指令选项)。
.directive('myDirective', function() {
var dir = {
link: function(scope, elem, attr) {
console.log(dir.name);
}
};
return dir;
});
[2]由于指令是在指令选项的上下文中调用的,因此您还可以使用编译函数来获取指令的名称。
.directive('myDirective', function() {
return {
compile: function(tElem, tAttr) {
var dirName = this.name;
return function(scope, elem, attr) { /* link function */ }
}
};
});
据我所知,您已经回答了自己的问题。 您可以在完成时使用字符串串联作为名称的前缀,但是将其添加为单独的数据存储可能会更容易。
element.data('directiveName', this.$name).data('startY', value);
我不确定避免冲突的含义,因为这仅适用于传递给链接函数的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.