如何捕获 ngSantitize 错误并将 html 显示为转义文本

How can I catch ngSantitize errors and display the html as escaped text

我们正在使用 AngularJS 来尝试将用户输入的内容显示为 HTML。大多数时候,用户输入 valid/safe 数据,我们使用 ng-bind-html 正确显示这些数据。有时他们会输入无效的 HTML,我仍然希望将其显示为原始文本。

如果我使用 ng-bind-html 尝试显示无效 HTML 我会收到此错误:

[$sanitize:badparse] The sanitizer was unable to parse the following block of html:

我不想使用 trustAsHtml,因为我不信任我们的消毒剂,并希望确保我们不会在页面上显示不安全 html。

根据 ngBindHtmlDirective 你可以这样做:

HTML:

<div ng-if="isSafeHtml()">
  <div ng-bind-html="invalidHtml"></div>
</div>
<div ng-if="!isSafeHtml()">
  {{invalidHtml}}
</div> 

JS:

$scope.isSafeHtml = function() {
   return !!$sce.getTrustedHtml($scope.invalidHtml);
}

修改后的 plunkr:http://plnkr.co/edit/Besix3PfQ1TjUEEagfca?p=preview

我最终创建了一个指令来执行此操作。下面是它的使用方法。

<div ng-bind-html-if-safe="SomeHtml"></div>

可以找到指令的来源here