大佬教程收集整理的这篇文章主要介绍了我可以阻止Angular.js的json过滤器排除以$开头的属性吗?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
json
,它将JavaScript对象显示为格式良好的JSON.
模板:
<pre>{{ {'name':'value','special':'yes','$reallyspecial':'Er...'} | json }}</pre>
显示:
{ "name": "value","special": "yes" }
(向下滚动以获取示例代码和short demo.)
如果您查看1.2.15 version source code,您会发现json过滤器的定义如下:
function jsonFilter() { return function(object) { return toJson(object,truE); }; }
所以,它使用toJson()函数(第二个参数(true)意味着:很好地格式化我的JSON).
所以,我们的下一站是toJson()函数,如下所示:
function toJson(obj,pretty) { if (typeof obj === 'undefined') return undefined; return JSON.Stringify(obj,toJsonreplacer,pretty ? ' ' : null); }
此函数使用“本机”JSON.stringify()
函数,传递自定义替换函数(toJsonreplacer).
toJsonreplacer()函数处理一些特殊情况:它检查密钥是否以$开头并忽略它(如果它是这样)(它是我们想要更改的)并检查该值是Window,Document还是Scope对象(在这种情况下,它将其转换为描述性字符串,以避免“将循环结构转换为JSON”错误).
function toJsonreplacer(key,value) { var val = value; if (typeof key === 'String' && key.charAt(0) === '$') { val = undefined; } else if (isWindow(value)) { val = '$WINDOW'; } else if (value && document === value) { val = '$DOCUMENT'; } else if (isScope(value)) { val = '$SCOPE'; } return val; }
为了完整起见,检查Window和Scope的两个函数如下所示:
function isWindow(obj) { return obj && obj.document && obj.LOCATIOn && obj.alert && obj.seTinterval; } function isScope(obj) { return obj && obj.$evalAsync && obj.$watch; }
最后,我们需要做的就是创建一个使用完全相同代码的自定义过滤器,唯一的区别是我们的toJsonreplacer()不会过滤掉以$开头的属性.
app.filter('customJson',function () { function isWindow(obj) { return obj && obj.document && obj.LOCATIOn && obj.alert && obj.seTinterval; } function isScope(obj) { return obj && obj.$evalAsync && obj.$watch; } function toJsonreplacer(key,value) { var val = value; if (isWindow(value)) { val = '$WINDOW'; } else if (value && (document === value)) { val = '$DOCUMENT'; } else if (isScope(value)) { val = '$SCOPE'; } return val; } function toJson(obj,pretty) { if (typeof obj === 'undefined') { return undefined; } return JSON.Stringify(obj,pretty ? ' ' : null); } return function(object) { return toJson(object,truE); }; });
另见这short demo.
*缺点是您的自定义JSON过滤器不会受益于Angular的json过滤器的进一步改进/增强,因此您必须重新定义您的自定义JSON过滤器以包含更改.当然,对于像这样的基本和简单的过滤器,人们不应该期望频繁或广泛的变化,但这并不意味着不会有任何变化.
以上是大佬教程为你收集整理的我可以阻止Angular.js的json过滤器排除以$开头的属性吗?全部内容,希望文章能够帮你解决我可以阻止Angular.js的json过滤器排除以$开头的属性吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。