【问题标题】:decode characters to html using angularjs $sanitize使用 angularjs $sanitize 将字符解码为 html
【发布时间】:2014-06-03 04:05:01
【问题描述】:

我正在尝试使用 $sanitize 来解码字符,但我遇到了两难境地。我需要使用 $sanitize 服务(我不能使用 ng-bind-html),但是当我使用 $sanitize 和 ng-bind-html 时,我似乎得到了两个不同的输出,即使它们应该产生相同的结果因为 ng-bind-html 通过 $sanitize.

请戳这里http://plnkr.co/edit/IZPyVUO5zaTnxiIAzPLe?p=preview

有没有办法使用 $sanitize 服务获取 ng-bind-html 输出的值?我是在做一些愚蠢的事情还是这是角度实现的限制?

【问题讨论】:

    标签: javascript html angularjs


    【解决方案1】:

    其实ng-bind-html不一定经过$sanitize。我认为ng-bind-html 所做的不仅仅是$sanitize,因为$sanitize 如果出现(由$sce 调用)将只是ng-bind-html 的一个阶段。

    根据ng-bind-html的源代码(底部@https://github.com/angular/angular.js/blob/master/src/ng/directive/ngBind.js),主要是使用$sce进行转换。像这样的:

    var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {
      return function(scope, element, attr) {
        element.addClass('ng-binding').data('$binding', attr.ngBindHtml);
    
        var parsed = $parse(attr.ngBindHtml);
        function getStringValue() {
          var value = parsed(scope);
          getStringValue.$$unwatch = parsed.$$unwatch;
          return (value || '').toString();
        }
    
        scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) {
          element.html($sce.getTrustedHtml(parsed(scope)) || '');
        });
      };
    }];
    

    神奇的部分应该是element.html($sce.getTrustedHtml(parsed(scope)) || '');

    【讨论】:

    • 我现在看到了不同之处。但麻烦依然存在。我无权访问元素,我正在尝试在工厂中执行此操作。这可能吗?
    • @dheerajmanju1 啊哈,我想我找到了诀窍……您可以将经过净化的 html 放入 DOM 元素中,然后从中检索文本。喜欢:angular.element('<div>'+$scope.sanitized+'</div>').text(); 会产生与您的ng-bind-html 完全相同的结果。
    猜你喜欢
    • 2016-08-18
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多