0

我有一个 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>");
});

http://jsfiddle.net/bugd67e3/

4

2 回答 2

3

演示

添加此指令

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); 
            });
        }
    }
}]);    
于 2014-08-20T14:21:01.367 回答
0

就我而言,我有$scope.content从后端动态拉取的,延迟为 1-2 秒。 如果在已经初始化CKEDITOR.inline()之后填充内容,则不起作用。CKEDITOR我最终得到了以下解决方案,它很好地解决了 2way 数据绑定和加载延迟问题。

<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));
            }
        }
    };
}]);
于 2014-12-05T08:42:17.583 回答