另一个angularJS问题! 我仍在尝试学习指令,并且我正在考虑根据传入的范围项目来显示不同的模板。我用Google搜索并找到了多种方法来实现这两种方法
link:
和
controller:
并且已经看过评论表明这不能/不应该使用
来完成templateURL :
我有点困惑,因为这是我实现它的方式..
我有2个模板: -
<div>here is my name :- {{name}}, and im template 1</div>
<div>here is my name :- {{name}}, and im template 2</div>
这是指令
.directive('createDirective', function () {
return {
scope: {name:'&myName'},
restrict: 'E',
templateUrl: function (tElement, tAttrs) {
switch (tAttrs.template)
{
case '1':
return 'app/event/showname.html'
break;
case '2' :
return 'app/event/showname2.html'
break;
}
console.log('template')
},
}
});
和HTML中的指令
<create-directive my-name="bob" template="1"></create-directive>
这似乎有效,而且是一个更简单的解决方案..但是,我不应该使用这种方法的原因是什么?
答案 0 :(得分:2)
说不应使用templateUrl
函数是不正确的 - 它是出于某种原因提供的。
对于您展示的有限示例,它可以正常工作。
但是,你的例子没有说明你想要的东西,即:
“...根据传入的范围项显示不同的模板
执行template="1"
时,您没有传递范围变量。如果您要传递范围变量,它将如下所示:
<create-directive my-name="bob" template="{{templateNum}}">
其中templateNum
是范围上设置的变量,可以等于"1"
。在这种情况下,templateURL
函数方法将不起作用,因为{{templateNum}}
表达式尚未插值。因此,tAttrs.template
实际上等于字符串"{{templateNum}}"
,而不是值"1"