angularjs - 如何修复 Angular 1.2 过滤器中的 "10 $digest() iterations reached. Aborting!"错误?

标签 angularjs angularjs-filter

我创建了一个 过滤器 在使用 的 AngularJS 1.2 中摊牌JS 解析 Markdown 内容转换成 HTML:

App.filter('markdown', function( $sce ) {
    var converter = new Showdown.converter();
    return function (value) {
        var html = converter.makeHtml(value);
        return $sce.trustAsHtml(html);
    };
});

模板中的绑定(bind)是通过 完成的。 ng-bind-html .这个接收到最终的 HTML 内容,因此必须显示内容:
<div ng-bind-html="post.content | markdown"></div>

过滤器 但我在控制台中收到此错误,因为 它返回 $sce 服务 应该 只返回解析后的 HTML 字符串 .
10 $digest() iterations reached. Aborting!

如何在 中避免这种情况?过滤器 ?我找不到任何可以从 $sce 服务中提取转义 html 的方法。

编辑 :如果我在配置中禁用清理服务,即使代码保持完全相同,我也不会收到此错误。
$sceProvider.enabled(false);

最佳答案

好的,经过一番调查,我发现问题出在实例上。每次您的过滤器触发时,您都会返回另一个实例。然后 ng-bind-html 观察者无限触发。

Demo

我添加了所有受信任值的缓存:

app.filter('markdown', ['$sce', function( $sce ) {
    var converter = new Showdown.converter();
    var converted = {};

    return function (value) {
      if(converted.hasOwnProperty(value)) {
        return converted[value];
      }

      var html = converter.makeHtml(value);
      var trusted = converted[value] = $sce.trustAsHtml(html);
      return trusted;
    };
}]); 

关于angularjs - 如何修复 Angular 1.2 过滤器中的 "10 $digest() iterations reached. Aborting!"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306452/

相关文章:

angularjs - 删除 AngularJS 货币过滤器小数/美分

javascript - AngularJS ng-重复某些过滤表达式

javascript - 使用 Angular 根据对象的年龄显示不同的时间戳

javascript - 如何在嵌套的 ngRepeat 中的第二个 ngRepeat 上应用过滤器?

javascript - PHP json_decode 不适用于对象 GET 变量

javascript - 使用 AngularJS UI 使工具提示位置相对于窗口大小

javascript - 在指令中访问父范围

javascript - angularjs从服务获取错误消息到 Controller

angularjs - ng-scrollbar 不适用于 ng-repeat

javascript - Angularjs groupBy + orderBy