我有一个指令,可以具有动态模板,并带有表达式。
如果我使用 ng-bind-html
,则表达式将无法评估,如果我使用 ng-bin-template
,则html零件将作为文本(编码html)而不是html返回。
那么是否有 ng-bind-html-template
之类的东西?还是我必须自己做?
现在,我正在使用一个函数来允许开发人员返回渲染的HTML本身,但宁愿使用模板。
更新:@charlietfl"动态模板"是指动态并由最终用户定义的东西,我不知道其中有什么。
这是我的代码:
// Columns definition in directive's config provided by the user
columns: [
{
title: 'نام سنجه',
name: 'measurename',
key: 'measurecode',
headerTemplate: function (content, col) {
return col.title + " <small><span class='label label-info'>واحد</span></small>";
},
template: function (item, content, col) {
return item.measurename + " <small><span class='label label-info'>" + item.unitname + "</span></small>";
}
}
],
如何渲染:
$scope.renderHeaderCell = function (col) {
var content = col.title;
if (isFunction(col.headerTemplate)) {
var _content = col.headerTemplate(content, col);
if (angular.isDefined(_content) && _content !== false) {
content = _content;
} else if (angular.isDefined(col.headerTemplate)) {
content = col.headerTemplate;
// If this is not used, the HTML content will be encoded to be safe
return $sce.trustAsHtml(content);
};
}
}
如何在模板中使用:
<td ng-repeat="col in config.columns" width="200" ng-bind-html="renderHeaderCell(col)"></td>
但是,我想将模板传递到这样的配置:
headerTemplate: "{{col.title}} <small><span class='label label-info'>واحد</span></small>",
并在这样的模板中使用它:
<td ng-repeat="col in config.columns" width="200" ng-bind-html-template="col.headerTemplate"></td>
尝试使用$sce.trustAsHtml
和ng-bind-html
。在您的控制器中,将您的来源设置为信任:
vm.Overview = $sce.trustAsHtml(Overview)
html:
<p ng-bind-html="vm.Overview"></p>