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


我想在链接函数中使用指令的名称。我怎么能得到它?

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

9063
2018-03-23 01:31


起源

如果我可以问,你为什么要这样做呢? - Eliran Malka
我想可能会使用指令的名称作为前缀。但是,一般来说,我只是想知道它有多难。 - Misha Moroshko
我认为这将是非常困难的 - 你必须至少知道注射器调用的顺序,而不是你能做到的 查找模块 _invokeQueue (这应该是内部的)指令的注射 - 当然这将是 非常僵硬,所以我不推荐它。 - Eliran Malka
angular提供了自己的依赖注入,所以大部分时间你都会按照他们的名字查找内容,参考DIC(例如 $injector.get('myDirective'))。从中获取名称并不是那么容易。但我希望我错了 - 这样的选择可能会很好。 - Eliran Malka


答案:


只需在注射外定义它:

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

6
2018-03-23 02:14





里面有可能 compile 的功能 指示

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

9
2018-04-18 22:10





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

arguments.callee.caller 在JavaScript中弃用的属性


0
2017-11-10 06:57



顺便说一句,这不会在'严格'模式下工作 - parliament