Задайте базу templateUrl для атрибута в директиве

Я работаю над набором директив angular, и я хочу загрузить правильный шаблон на основе наличия или значения атрибута.

<my-form horizontal> </my-form>
<my-form vertical> </my-form>

Если горизонтальный, templateUrl должен быть /partials/horizontal-form и Если вертикаль, templateUrl должен быть /partials/vertical-form

Я заинтересован в templateUrl, потому что я не могу использовать template, поскольку html зависит от атрибутов. В функции compile.pre html уже загружен.

Если есть еще один способ добиться этого, я открыт для него, так как теперь я начинаю с angular, и чем больше информации, тем лучше.

Спасибо

Ответы

Ответ 1

Одним из решений для этого является использование ng-include внутри файла шаблона.

Первый атрибут внутри файла шаблона будет иметь следующее:

<div ng-include = "getTemplate()">

</div>

В коде директивы вы должны написать что-то вроде:

scope : {direction : "="},
link : function(scope,element,attrs)
{
    scope.getTemplate = function(){
        if(scope.direction === "horizontal")
        {
            return "horizontal.html";
        }
        return "vertical.html";
    }
}

Надеюсь, это поможет!

Ответ 2

fyi, это теперь правильно зафиксировано в angular 1.1.4

вы можете передать функцию templateUrl. входными параметрами являются элемент, атрибуты. и возвращает строку (templateUrl, которую вы хотите использовать)

docs здесь: http://code.angularjs.org/1.1.4/docs/guide/directive