基于指令中的属性设置templateUrl

时间:2012-09-16 06:31:13

标签: angularjs directive

我正在处理一组角度指令,我想根据属性的存在或值加载正确的模板。

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

如果是水平的,则templateUrl应为/partials/horizontal-form和 如果是垂直,则templateUrl应为/partials/vertical-form

我对templateUrl感兴趣,因为我不能使用template因为html取决于属性。在compile.pre函数中,html已经加载。

如果有另一种方法可以达到这个目的,我对此持开放态度,因为我现在开始使用棱角分明,信息越多越好。

由于

2 个答案:

答案 0 :(得分:22)

fyi现在已经在角度1.1.4中正确修复了

您可以将函数传递给templateUrl。输入参数是元素,属性。并返回一个字符串(您要使用的templateUrl)

这里的文档:http://code.angularjs.org/1.1.4/docs/guide/directive

答案 1 :(得分:11)

其中一个解决方案是在模板文件中使用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";
    }
}

希望这有帮助!