繁体   English   中英

在AngularJS中获取指令名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM