Can I dynamically load an AngularJS Directive templateUrl
when working in a table?
I have the following HTML, repeating a tr
with a fw-rule
directive:
<tbody>
<tr ng-repeat="rule in data | orderBy:predicate:reverse" fw-rule="rule">
</tr>
</tbody>
I would like the contents of that tr
to different, depending on the state of an "edit" variable.
One of my partials is below (the other is just a variation on layout):
<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>
I reviewed the following two questions here at SO, which almost gave me the answer:
However, they both call to write the directive's template
using a <div ng-include"getTemplateUrl()"></div>
, such are the following:
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>'
};
});
This does not work in my case through, since div
is not a valid child of tr
(nor is span
, which I also tried). As a result the browser renders that content outside the table.
Is there a way I can dynamically update the template
of a directive, without using ng-include
, so that it can behave inside a table?