尽管遇到以下错误,但我编写的过滤器似乎运行良好。
TypeError: Cannot read property 'replaceAll' of undefined
过滤器将错误的相对URL替换为绝对URL。这是过滤器和标记。
//located elsewhere
String.prototype.replaceAll = function(s,r){
return this.split(s).join(r);
}
//located elsewhere
var imgBase = '<img src="http://discourse.mysite.com';
app.filter('prependImg_topic', function(){
return function(cooked) {
return cooked.replaceAll('<img src="//discourse.mysite.com', imgBase);
}
})
标记:
<div class="topic-post-body" ng-bind-html="topic.post_stream.posts[0].cooked | prependImg_topic "></div> "
我有一个倾向,$sce
因为我要在中输入数据ng-bind-html
。如果我像这样打印值:{{topic.post_stream.posts[0].cooked}}
,它就存在,所以我知道它不是未定义的。此外,过滤器可以正常工作并正确写入网址。去搞清楚。
我可以提供任何其他需要帮助的详细信息。谢谢。
编辑:可能有帮助的另一个奇怪之处是,ng-repeat
此过滤器内部有效,并且不会引发任何错误。令人毛骨悚然的东西!
<div class="post" ng-repeat="post in posts" ng-if="$index > 0">
<div class="topic-post-body" ng-bind-html="post.cooked | prependImg_topic"></div>
</div>
我猜数据是异步加载的,如果是这种情况,也难怪过滤器会因为尝试对(尚)不存在的数据进行操作而引发错误。您所做的检查{{ topic ... }}
不会证明任何内容,因为如果最终会出现数据,则它将打印数据(最好用进行检查console.log
)。内部过滤器ng-repeat
不引发任何错误的原因是,ng-repeat
仅当有任何数据要迭代时,该过滤器才起作用,这意味着当内部过滤器ng-repeat
运行时,数据已经存在。这就是为什么您应该始终以使过滤器可以处理undefined
或null
值而不抛出的方式构造过滤器的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句