我正在开发一个聊天应用程序,我们希望在客户端过滤聊天以清除脏话和 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 参数,但这导致了循环,我现在明白了)如果这是更好的方法,我很乐意以不同的方式解决这个问题。感谢您的任何帮助,您可以提供!