AngularJS动态模板

时间:2015-03-27 20:52:18

标签: javascript angularjs

另一个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>

这似乎有效,而且是一个更简单的解决方案..但是,我不应该使用这种方法的原因是什么?

1 个答案:

答案 0 :(得分:2)

不应使用templateUrl函数是不正确的 - 它是出于某种原因提供的。

对于您展示的有限示例,它可以正常工作。

但是,你的例子没有说明你想要的东西,即:

  

“...根据传入的范围项显示不同的模板

执行template="1"时,您没有传递范围变量。如果您要传递范围变量,它将如下所示:

<create-directive my-name="bob" template="{{templateNum}}">

其中templateNum是范围上设置的变量,可以等于"1"。在这种情况下,templateURL函数方法将不起作用,因为{{templateNum}}表达式尚未插值。因此,tAttrs.template实际上等于字符串"{{templateNum}}",而不是值"1"