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