AngularJS:如何在链接函数中获取指令名称?

12

我想在链接函数内部使用指令的名称。我该如何获取它?

app.directive('myDirective', function() {
  return {
    link: function(scope, element, attrs) {
      // How could I get directive's name here (i.e. 'myDirective')?
    }
  };
});

你为什么想这样做,如果我问得可以的话? - Eliran Malka
我想可能会使用指令名称作为某些东西的前缀。但是,总的来说,我只是好奇知道它有多难。 - Misha Moroshko
我认为这可能会非常困难 - 你至少需要知道注入器调用的顺序,然后才能查找模块的_invokeQueue(应该是内部的)来获取指令的注入方式 - 当然,这样做会极其死板,所以我不建议这样做。 - Eliran Malka
Angular提供了自己的依赖注入,因此大多数情况下您实际上将通过名称查找事物,并引用DIC(例如$injector.get('myDirective'))。从中获取名称并不容易。但我希望我是错的 - 这样的选项可能很好。 - Eliran Malka
3个回答

10

可以在指令compile函数内部实现。


directives.directive('myNamedDir', ['$compile', function ($compile) {
    return {
        compile: function(cElem, cAttrs, transclude) {
            var name = this.name;
            return function linkFunction(){
                //use name
            }
        }
   }]);

linktemplate、预链接等函数中也可以实现。 - Miquel Al. Vicens

5

只需要在注入外定义它:

var name = 'myDirective';
app.directive(name, function() {
  return {
    link: function(scope, element, attrs) {
      console.log(name); // --> myDirective
    }
  };
});

-1
app.directive('myDirective', function() {
    return {
        link: function(scope, element, attrs) {
            console.log(arguments.callee.directiveName); // --> myDirective
        }
    };
});

JavaScript中arguments.callee.caller属性已被弃用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接