0

我下面给出的响应是编码格式,我正在使用过滤器对其进行解码并在我的 html 中显示值。但我需要在我的视图中将它们显示为 html。所以使用了trustAsHtml。但这里的问题是当我使用 trustAsHtml 时,我的解码不会发生。它显示异常意外令牌。

 $scope.res=  "data": [
                {
                  "jd": "<p>this jd1</p>"
                },
                {
                  "jd": "<li>this jd2</li>"
                },
                {
                  "jd": "<ul>this jd3</ul>"
                },
                {
                  "jd": "<p>this jd4</p>"
                }
              ]
            }   

JS:

$scope.trustAsHtml = $sce.trustAsHtml;

筛选:

 app.filter('decodeFilter', function() {
    return function(input) {
        return decodeURIComponent(unescape(input));
    };
});

html:

     <div ng-repeat="item in res">
        <div ng-bind-html ="trustAsHtml(item.jd | decodeFilter)">
</div>
4

2 回答 2

1

您的 ng-repeat 对象 res 似乎存在问题,您应该根据您的代码使用 res.data。我也对您的自定义过滤器进行了一些更正。您也可以为您给定的工作示例检查此 plunker 。

模板:

<div ng-repeat="item in res.data">
  <div ng-bind-html ="item.jd | decodeFilter"></div>
</div>

控制器:

app.controller('MainCtrl', function($scope) {
  $scope.res = {
    "data": [ {
        "jd": "<p>this jd1</p>"
      }, {
        "jd": "<li>this jd2</li>"
      }, {
        "jd": "<ul>this jd3</ul>"
      }, {
        "jd": "<p>this jd4</p>"
      }]
  };
});
app.filter('decodeFilter', function($sce) {
    return function(input) {
        return $sce.trustAsHtml(decodeURIComponent(input));
    };
});

注意: unescape() 函数在 JavaScript 1.5 版中已弃用。请改用 decodeURI() 或 decodeURIComponent()。这意味着 unescape 等于 decodeURLComponent。

于 2018-06-11T08:18:25.267 回答
0

您是否尝试过像这样使用$sceProvider在 app.config 中启用它?

angular
.module('myapp')
.config(["$locationProvider", "$sceProvider",function config($locationProvider, $sceProvider) {
        $sceProvider.enabled(true);
        $locationProvider.html5Mode(true);
});
于 2018-06-11T08:12:37.290 回答