我在使用 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/