Angularjs Popover不使用ng绑定html
我正在尝试动态加载我的代码所在的标签上的弹出窗口Angularjs Popover不使用ng绑定html,angularjs,angular-ui-bootstrap,popover,Angularjs,Angular Ui Bootstrap,Popover,我正在尝试动态加载我的代码所在的标签上的弹出窗口 $scope.setStatusMessage = function (message) { var lblClass = "", status = "" , template; lblClass = "label label-danger"; status = "failed"; template = '<label popover="' + message + '" popover-tri
$scope.setStatusMessage = function (message) {
var lblClass = "", status = "" , template;
lblClass = "label label-danger";
status = "failed";
template = '<label popover="' + message + '" popover-trigger="mouseenter" class="' + lblClass + '">' + status + '</label>';
return $sce.trustAsHtml(template);
}
我的html是
<span data-ng-bind-html="setStatusMessage(statusMessage)"></span>
问题是html代码正在工作,但popover不工作。我可以知道fix的问题吗
谢谢
更新
好的,伙计们,这里是这里是一些解决方法:
事实上,正如我在评论中所说的,这是相似的。所以,在将HTML插入标记后,您需要再次编译HTML
所以我有create指令compileHtml,您应该传递函数,该函数在代码中返回经过净化的HTML消息fn,并在代码中为该函数消息提供参数。指令监视消息的更改更新HTML并重新运行编译
更新
这是你的叉子
在我看来,最好创建一个指令,它将$watch over消息,在没有任何外部函数的情况下对其进行清理,然后重新编译。浏览器控制台中有错误吗?没有。在我的浏览器控制台上。你能创建一些小提琴来更好地理解类似的问题吗鲁本·纳戈加-不,伙计,它不是。我们不能在控制器上编译HTML。你可以在控制器上编译,但在控制器中$watch并使用HTML元素不是一个好的做法。好的,这是可以接受的,只需要很少的更改消息属性实际上不需要。没有它,我们可以拥有它。这是最新的。
directive('compileHtml', function($compile) {
return {
restrict: 'A',
scope: {
messageFn: '&',
message: '='
},
link: function(scope, iElement, iAttrs) {
scope.$watch('message', function(message) {
var html = scope.messageFn({'message': message});
iElement.html(html);
$compile(iElement.contents())(scope);
});
}
}
});