我有一个AngularJS应用程序,我从web服务获取一些数据并使用ng-bind-html将一些HTML解析到模板...但是当我尝试在ng-bind-html中绑定数据时 - 没有任何反应。任何人?
我在这里有一个小例子,..不是正确的情况。
HTML
<div ng-controller="MyCtrl">
<div ng-bind-html="post"></div>
</div>
的Javascript
angular.module('myApp',[])
.controller('MyCtrl', function($scope, $sce) {
$scope.name = 'World';
$scope.post = $sce.trustAsHtml("<h1>hello {{name}}</h1>");
});
答案 0 :(得分:3)
<强> DEMO 强>
添加此指令
angular.module("myApp").directive('compileTemplate', ["$compile", "$parse", function($compile, $parse) {
return {
restrict: 'A',
link: function($scope, element, attr) {
var parse = $parse(attr.ngBindHtml);
function value() { return (parse($scope) || '').toString(); }
$scope.$watch(value, function() {
$compile(element, null, -9999)($scope);
});
}
}
}]);
答案 1 :(得分:0)
在我的情况下,我有$scope.content
从后端动态拉出,延迟1-2秒。如果在CKEDITOR.inline()
已初始化后填充内容,则CKEDITOR
无法正常工作。我最终得到了以下解决方案,它可以很好地解决2ways数据绑定和加载延迟问题。
<div id="divContent" contenteditable="true" ck-editor ng-model="Content">
</div>
angular.module('ui.ckeditor', []).directive('ckEditor', ["$compile", "$parse", "$sce", function ($compile, $parse, $sce) {
return {
require: '?ngModel',
link: function (scope, elm, attr, ngModel) {
var hasInit = false;
scope.$watch(attr.ngModel, function (newValue, oldValue, scope) {
if (newValue && !hasInit) {
hasInit = true;
var content = $.parseHTML(newValue.toString());
$(elm[0]).append(content);
CKEDITOR.inline(elm[0]);
elm.on('blur keyup change', function () {
scope.$evalAsync(read);
});
}
})
// Write data to the model
function read() {
var html = elm.html();
ngModel.$setViewValue($sce.trustAsHtml(html));
}
}
};
}]);