gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:08:05 26 4
gpt4 key购买 nike

我创建了一个 过滤器 在使用 的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com