如何在目录工厂函数中获取调用元素?

时间:2015-03-14 21:58:16

标签: angularjs angularjs-directive

如何获得callingElement以下的值?

myModule.directive('SomeDirective',function(){
   var callingElement = ? // I want to get the current element here
   var typeAttribute = callingElement.getAttribute('type');
   switch (typeAttribute) {
       'typeA':
           return typeAFactory();
   }
});

我该怎么做?

我的目标是获取元素属性,以便根据调用元素的type属性的值将调用重定向到工厂函数

2 个答案:

答案 0 :(得分:0)

您的指令函数应该返回链接函数或符合Angular directive API的对象。在关联功能中,您可以暂停$scope$element$attributesngModelCtrl(可选)。

$element就是你想要的。请注意,它不是正常的DOM元素。如果你的应用程序中有jQuery,它将是一个jQuery元素。如果不这样做,它将是一个jqLit​​e元素(jqLit​​e是jQuery的简单版本)。

所以你的最终指令可能类似于:

angular.module('someApp', [])
  .directive('someDirective',  
    function(factoryA, factoryB) {

      function link($scope, $element, $attributes) {
        switch($element.val()) {
          case 'a':
            return factoryA
          case 'b':
            return factoryB
        }
      }

    return {
      link: link
    }
  }
)

请注意如何在指令中注入工厂。所以,继续注入你想在那里使用的工厂。

答案 1 :(得分:0)

呸。我一直在想这一切都错了。

答案是否定的,我无法在指令工厂内获取调用元素。原因是工厂在编译过程的早期只调用一次,以获取指令对象本身(从工厂返回)。

返回的指令对象是用于每个指令实例的东西,因此我将不得不使用它(编译,构造函数,模板函数,前后链接函数)。