角度字符编码问题

时间:2015-12-06 22:52:59

标签: javascript angularjs encoding

我试图显示从可以html编码的数据库返回的值

what's up!

在ng-repeat中,我输出这个值并将值传递给一个函数进行处理,并使用" trustAsHtml'功能

return $sce.trustAsHtml(html);

当我第一次加载页面时,一切看起来都很棒。该值输出为what's up!但是,如果我向模型添加值,它们将作为编码版本输出,直到我重新加载页面。

有关于此的任何想法吗?我很难过。

2 个答案:

答案 0 :(得分:0)

您可以使用ngBindHtmlUnsafe

<div ng-app ng-controller="MyCtrl">
    <ul>
    <li ng-repeat=" opt in opts" ng-bind-html-unsafe="getContent(opt)" >
        {{ opt.value }}
    </li>
    </ul>

    <p>{{opt}}</p>
</div>

function MyCtrl($scope) {
    $scope.getContent = function(obj){
        return obj.value + " " + obj.text
    }
    $scope.opts = [
        {value: 111, text: '<b>1st</b>' },
        {value: 222, text: '<i>2nd</i>' }
    ];
}

jsfiddle

答案 1 :(得分:0)

我不确定这一点,但我发现这可以帮到你。你可以创建一个指令,通过它使用$ watch函数来更新$ sce。

<div ng-controller="myCtrl">
  <b>User comments</b><br>
  <div class="well">
    <div ng-repeat="userComment in myCtrl.userComments">
      <span ng-bind-html="userComment.htmlData"></span>
      <br>
    </div>
  </div>
</div>

var ngBindHtmlDirective = ['$sce', function($sce) {
  return function(scope, element, attr) {
    scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
      element.html(value || '');
    });
  };
}];