Javascript 获取AngularJS指令链接到DOM元素(属性/标记名)的方法

Javascript 获取AngularJS指令链接到DOM元素(属性/标记名)的方法,javascript,html,angularjs,dom,angularjs-directive,Javascript,Html,Angularjs,Dom,Angularjs Directive,是否可以在指令内部找出它是通过属性还是通过标记名链接到DOM的 例如:,如果我有以下指令: app.directive('myDir', function () { return { restrict: 'AE', link: function (scope, element, attrs) { console.log( [link_type] ) // should be either Element or Attribute

是否可以在指令内部找出它是通过属性还是通过标记名链接到DOM的

例如:,如果我有以下指令:

app.directive('myDir', function () {
    return {
        restrict: 'AE',
        link: function (scope, element, attrs) {

            console.log( [link_type] ) // should be either Element or Attribute (or something similar)

        }
    }
});
然后,我应该得到如下结果:

<my-dir></my-dir> <!-- Should log 'Element' -->

<div my-dir></div> <!-- Should log 'Attribute' -->


到目前为止,我唯一能做的就是检查与某些独立作用域属性或DOM.nodeName属性相对应的属性,但我认为这有点不太靠谱,我想知道是否有专门的方法来解决这个问题。

为什么需要这样做?对于元素定义的指令和属性定义的指令,如果您希望使用不同的行为,只需使用两个指令,一个带有restrict:'E',第二个带有restrict:'a',这是我第一次尝试的,但对于我的情况,唯一不同的是隔离范围属性。其余的逻辑是相同的。有一些方法可以避免使用此方法,但我仍然想知道是否有可能获得上述结果。您可以检查链接函数中的元素是否出现属性/标记,并决定采用哪种方法。。。但一般来说,我认为这在指令声明中是不可能的,因为定义基本上是单音的,正如我在最后一段中所描述的,我也尝试过这一点,这是一个有效的解决方案。不过,我很好奇是否有一个内置的机制来实现这一点。我同意您不能在指令工厂函数中检查属性/标记,因为每个指令只调用一次(我相信,编译器第一次找到匹配项时),所以我不认为有其他方法可以处理它,比如在链接过程中手动执行