我最终在类似的情况下创建了以下指令。它做了两件事:
- 没有 HTML 清理
- 标记在当前范围内编译。
用法:
<tr ng-repeat="row in newItemHTMLs" replace-with-html="row"></tr>
资源:
myApp.directive('replaceWithHtml', ['$parse', '$compile', function($parse, $compile) {
return {
restrict: 'A',
compile: function(tElement, tAttrs) {
var ngBindHtmlGetter, ngBindHtmlWatch;
ngBindHtmlGetter = $parse(tAttrs.replaceWithHtml);
ngBindHtmlWatch = $parse(tAttrs.replaceWithHtml, function(value) {
return (value || '').toString();
});
$compile.$$addBindingClass(tElement);
return function(scope, element, attr) {
$compile.$$addBindingInfo(element, attr.replaceWithHtml);
return scope.$watch(ngBindHtmlWatch, function() {
return element.replaceWith($compile(ngBindHtmlGetter(scope))(scope) || '');
});
};
}
};
}
]);