angularjs - 模板必须只有一个根元素,自定义指令替换 : true

标签 angularjs angularjs-directive

我在使用 replace: true 的自定义指令时遇到问题,

http://jsbin.com/OtARocO/2/edit

据我所知,我只有一个根元素 my ,这里发生了什么?

Error: Template must have exactly one root element. was: 
<tbody>
  <tr><td>{{ item.name }}</td></tr>
  <tr><td>row2</td></tr>
</tbody>

Javascript:
var app = angular.module("AngularApp", [])
  .directive('custom', [function () {
    return {
      restrict: 'E',
      replace: true,
      templateUrl: 'lineItem.html',
      link: function(scope, element, attrs) {

      }
    };
  }])
.controller('MyCtrl', ['$scope', function($scope) {
  $scope.items = [
    { 
      name: 'foo'
    },
    {
      name: 'bar'
    },
    {
      name: 'baz'
    }
  ];
}]);

HTML:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
  <meta name="description" content="Angular Avatar Example" />  

  <script src="//crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>


<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body data-ng-app="AngularApp">
  <script type="text/ng-template" id="lineItem.html">
    <tbody>
      <tr><td>{{ item.name }}</td></tr>
      <tr><td>row2</td></tr>
    </tbody>
  </script>
  <div data-ng-controller="MyCtrl">
    <table>
      <custom data-ng-repeat="item in items"></custom>
    </table>
  </div>
</body>
</html>

最佳答案

好像是a known bug AngularJs。

您可以做的是将限制更改为属性而不是元素,删除 tbody从模板并使用 <tbody custom ng-repeat="item in items">在您的 html 代码中。

基本上:

您的模板变为:

<tr><td>{{ item.name }}</td></tr>
<tr><td>row2</td></tr>

您的指令:
return {
  restrict: 'A',
  templateUrl: 'lineItem.html',
  link: function(scope, element, attrs) {

  }
};

还有你的 HTML :
<div data-ng-controller="MyCtrl">
  <table>
    <tbody custom data-ng-repeat="item in items"></tbody>
  </table>
</div>

关于angularjs - 模板必须只有一个根元素,自定义指令替换 : true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233372/

相关文章:

angularjs - 带有 Ionic Angular ng-option 的空选择框

javascript - 作为内容脚本加载的缩小版 AngularJS 应用程序能够发出 XHR 请求吗?

javascript - 如何访问 Angular.JS 中 $routeProvider 配置中的工厂数据对象?

javascript - ng-csp 指令的性能影响

angularjs - 我们什么时候知道 Angular 中元素的实际宽度?

javascript - Angular 如何知道应该重新应用绑定(bind)以使用更新的数据刷新 UI 元素?

javascript - Plnkr Controller 不工作

angularjs - 字符串表达式不能与 ng-bind 指令一起使用,而数字表达式可以吗?

javascript - Angular 模型失去了 ng-included 在指令中的范围

javascript - 使用 AngularJS 绑定(bind)后如何获取元素的字符串长度?