在表格中工作时,我可以动态加载AngularJS指令templateUrl
吗?
我有以下HTML,用tr
指令重复fw-rule
:
<tbody>
<tr ng-repeat="rule in data | orderBy:predicate:reverse" fw-rule="rule">
</tr>
</tbody>
我希望tr
的内容不同,具体取决于“编辑”变量的状态。
我的部分内容是下面的(另一个是布局的变化):
<td><input type="checkbox"></td>
<td ng-click="isEditing=!isEditing">{{ fwRule.name }}<br><span class="rule-description">{{ fwRule.description }}</span></td>
<td>{{ fwRule.source }}</td>
<td>{{ fwRule.destination }}</td>
<td>{{ fwRule.protocol }}</td>
<td>{{ fwRule.schedule }}</td>
<td>{{ fwRule.action }}</td>
<td>{{ fwRule.reporting }}</td>
我在SO上回顾了以下两个问题,几乎给了我答案:
但是,他们都要求使用template
编写指令<div ng-include"getTemplateUrl()"></div>
,如下所示:
app.directive('fwRule', function () {
return {
restrict: 'A',
scope: {
fwRule: '='
},
controller: function ($scope) {
$scope.getTemplateUrl = function () {
// a check would be made here to return the appropriate partial
return 'partials/RuleEditTableRow.html'
}
},
link: function (scope, element, attrs) {
},
template: '<div ng-include="getTemplateUrl()"></div>'
};
});
这在我的情况下不起作用,因为div
不是tr
的有效子项(也是span
,我也尝试过)。因此,浏览器会在表格外部呈现该内容。
有没有一种方法可以动态更新指令的template
,而不使用ng-include
,以便它可以在表格中运行?
答案 0 :(得分:0)
您可以使用$ compile服务编译正确的模板
app.directive('fwRule', function ($compile) {
return {
restrict: 'A',
scope: {
fwRule: '='
},
controller: function ($scope) {},
link: function ($scope, element, attrs) {
var template = '<td>cell 1</td><td>cell 2</td>';
angular.element(element).html(template);
$compile(element.contents())($scope);
}
};
});
我认为我在这个小提琴中使用了你的代码:http://jsfiddle.net/ztv5gwwx/4/