1

我正在开发一个聊天应用程序,我们希望在客户端过滤聊天以清除脏话和 HTML,据我所知,Angular 1.2.0-rc2ng-bind-html应该自动清除您传递给它的任何文本。同样从我看到的文档中,您可以传递$sce.trustAsHtml(input)给 ng-bind html(理论上)以呈现ng-bind-html-unsafe在 1.2.0 中删除的 HTML。

我的问题在我的 JSFiddle 我没有看到 ng-bind-html clean html。我可以将带有链接的字符串传递给它,ng-bind-html它将呈现链接。我正在尝试开发一个短标签过滤器(因此版主可以做一些事情来实现[url|http://google.com|Google]并将其生成的 HTML 包装在$sce.trustAsHtml(input).

这是我的 JSFiddle:http: //jsfiddle.net/pa4XV/

你可以看到我有以下内容$scope

$scope.chats = [
  {from: 'test', message: 'Chat Message 1'},
  {from: 'test', message: 'Chat Message 2 <a href="http://facebook.com">Facebook</a>'},
  {from: 'test2', message: 'Chat Message [url|http://google.com|Google]'}
];

我希望第三条消息显示一个链接,第二条消息被 ng-bind-html 捕获(因为它不会被包裹$sce)但是在小提琴中我看到两者都被渲染了。这让我很困惑,因为这不是我在代码中看到的行为。我的 Fiddle 和我的代码之间唯一的大区别是 $scope.chats 来自 Firebase 而不是硬编码,我的shortTags过滤器有代码包装它检查用户是否是版主(它只替换 mods 的短标签)。

我做这个“错误”的可能性很大,或者有更好的方法来做这种事情(我从 $watchCollection 开始,添加了一个 .safeMessage 参数,但这导致了循环,我现在明白了)如果这是更好的方法,我很乐意以不同的方式解决这个问题。感谢您的任何帮助,您可以提供!

4

1 回答 1

2

此错误已在 3 天前由提交修复:https ://github.com/angular/angular.js/commit/e2068ad426075ac34c06c12e2fac5f594cc81969

于 2013-09-23T15:20:29.177 回答