2016-06-08 4 views
0

У меня есть директива, которая может быть либо атрибутом, либо элементом. Когда это атрибут, я не хочу загружать шаблон внутри существующего элемента, на котором он был объявлен. Когда это элемент, я хочу загрузить данный шаблон и заполнить специальный тег директивы.Угловая директива optional templateUrl

Я пробовал:

return { 
    link: function(){...}, 
    templateUrl: function(element, attrs){ 
    url = "path/to/directive/template.html"; 

    // Checking if directive is used as an attribute here 
    if(angular.isDefined(attrs.myDirective)){ 
     url = null; // Tried false, empty string, etc. but angular not happy with any of it 
    } 
    return url; 
    } 
} 

Любая идея, как этого добиться?

ответ

0

Считаете ли вы, что вы пишете две директивы с тем же именем и используете ограничение для указания поведения разных шаблонов?

function directiveFactory(usesTemplate){ 

    return ['$timeout', function($timeout){ 
     var ddo = { 
      link: function(scope, el,attr){ 
       $timeout(someThing, 1000) 
       //if you dont actually need to use a timeout, might 
       //i suggest scope.$applyAsync if your version of angular supports it? 
      } 
     } 

     if(usesTemplate){ 
      ddo.restrict = 'E'; 
      ddo.templateUrl = 'path/to/template'; 
     } else { 
      ddo.restrict = 'A'; 
     } 

     return ddo; 
    }]; 

} 

module('somename').directive('someName', directiveFactory(true)).directive('someName', directiveFactory(false)); 
+0

не думаю, что вы можете использовать одно и то же имя для 2 директив. – charlietfl

+0

@charlietfl: Вы можете. Он отлично подходит для привязки нового поведения к существующим директивам. (например, регистрация каждого активатора ng-click) – Iain

+0

Спасибо за ваш ответ, проблема в том, что я использую угловые провайдеры внутри функции ссылок. И эти поставщики объявлены в функции .directive(). '.directive ('myDirective', ['$ timeout', function ($ timeout) {}])'. И если функция ссылки находится снаружи, это вызовет ошибку, поскольку поставщики не определены. – MonsieurNinja

Смежные вопросы