我有一个Angular指令。在link函数中,我这样做:

link: function(scope, element, attrs) {
    ...
    element.data('startY', value);
    ...
}


我想做的是使用指令名称加上perfix 'startY',而无需对名称进行硬编码。我想动态获取名称。

有什么办法吗? Angular是否提供一种反映方式?就像是:

link: function(scope, element, attrs) {
    ...
    element.data(this.$name + '-startY', value);
    ...
}


如果不是,为避免冲突,选择data()键的最佳建议最佳做法是什么?

最佳答案

AngularJS source code所示,指令名称是在指令选项所在的对象文字上下文中分配的。但是,链接函数无法访问对象文字的上下文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 */ }
    }
  };
});

关于javascript - 在AngularJS中获取指令名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24040496/

10-12 12:48
查看更多