在Angular指令中转换将元素放入单个"span"中

pde*_*eva 7 javascript angularjs angularjs-directive

这是我的指示:

myapp.directive('envtable',  function () {
return {
    restrict: 'E',
    replace: true,
    transclude: true,
    template: '<table class="table" ng-transclude></table>'
};
});
Run Code Online (Sandbox Code Playgroud)

这就是我在html中使用它的方法(使用bootstrap css)

<envtable>
    <tr>
      <td>OS</td>
      <td>{{env.osName}}</td>
    </tr>
    <tr>
      <td>OS Version</td>
      <td>{{env.osVersion}}</td>
    </tr>
  </envtable>
Run Code Online (Sandbox Code Playgroud)

但是,生成的代码在chrome中看起来像这样:

<table class="table" ng-transclude=""><span class="ng-scope ng-binding">

      OS
      Windows 8


      OS Version
      6.2

  </span></table>
Run Code Online (Sandbox Code Playgroud)

如您所见,Angular只是忽略了我的所有tr/td标记,并将内容放在一个span元素中.为什么会这样?

顺便说一下,作为一个实验,我尝试p在envtable中使用只有一个transcluded tr\td标签而不是标签,在这种情况下,angular只是ng-scopep标签添加一个类.那么为什么搞砸这些tr/td标签呢?

zs2*_*020 6

事实证明这适用于 restrict: 'A'

<table envtable>
    <tr>
        <td>OS</td>
        <td>{{env.osName}}</td>
    </tr>
    <tr>
        <td>OS Version</td>
        <td>{{env.osVersion}}</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

Demo