如何允许特定的html实体在ng-repeat中显示,同时清理其余部分?

时间:2015-09-01 08:12:07

标签: javascript html angularjs

所以对于这个例子,我有一个我用$ http检索的字符串列表,字符串可以包含一行中的多个空格,为了正确显示我需要用nbsp html替换字符串实体。对用户提供的字符串进行消毒也很重要。什么是最简单的方法来保持$ sce启用字符串被正确消毒的地方,但在完成之后,用实体替换任何空格并正确显示它而不是文字?

我把一个jsfiddle放在一起。我试图这样做,所以带有Hello的字符串和单词中的一组空格就像它一样显示,但我不希望b实体标记以实际粗体显示,我希望它被消毒/转义并显示为通常的文字html标签。

http://jsfiddle.net/J4nRK/40/

<div ng-app='myApp' ng-controller="Controller">
<ul>
   <li ng-repeat="item in items" ng-bind-html="item | includespaces">
       <!--{{ item }}-->
   </li>
</ul>

var app = angular.module('myApp', []);
app.controller('Controller', function ($scope, $sce) {
    // Assume this is data from $html.
    $scope.items = ['He       llo', 'Testing<b>bold</b>', 'bleh'];
});

app.filter('includespaces', ['$sce', function ($sce) {
    return function (text) {

        //return $sce.getTrustedHtml(text);
        return $sce.trustAsHtml(text.replace(/ /g, "&nbsp;"));
    }
}]);

1 个答案:

答案 0 :(得分:1)

可能使用pre吗?根本不需要过滤器。

<li ng-repeat="item in items">
  <pre ng-bind="item"></pre>
</li>

imgur