在过滤器中使用带有$ sce的ng-bind-html时在控制台中抛出的错误

时间:2013-09-16 16:02:57

标签: angularjs firebase angularjs-ng-repeat angularjs-filter

我正在开发一个聊天应用程序,我们希望过滤客户端的聊天内容以清除脏话和HTML以及我在Angular 1.2.0-rc2 ng-bind-html中可以自动清除的内容你传递给它的文字。同样来自我看到的文档,您可以将$sce.trustAsHtml(input)传递给ng-bind html(理论上),以便在1.2.0中删除ng-bind-html-unsafe时呈现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]'}
];

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

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

1 个答案:

答案 0 :(得分:2)