工作中遇到的奇怪bug😂不吐不快(2)
2019-06-25
前情提要
工作嘛,总有一堆烦心事;每天就是努力扮演一个情绪稳定的成年人。
然后在遇到奇奇怪怪的bug之后,总能一秒破功,让人抓狂,尤其是当bug实在是太智障的时候,让人不禁想问一句:“这尼玛都什么沙雕玩意儿?!”
⚠️在此绝不diss任何码农、攻城狮、程序猿。生活不易,头顶易秃,和气生财。
使用Angular ng-repeat命令爬坑记
产品需求是实现一个多项input框,通过 + - 按钮插入和删除input框的小功能。项目是一个使用了Angular框架的后台管理项目,实现思路是:通过双向绑定,更新数组元素,从而自动更新页面展示的效果。但是就是这样一个小小的功能,也折腾了我一个大下午。在基本实现都写好之后,就是不断的掉坑->爬坑->掉坑的循环往复,简直令人抓狂。其中最令人分分钟想要进入狂暴丧尸状态的就是:
如果数组中有相同元素,Angular将报[ngRepeat:dupes]错
Exm???
请问Angular的程序员们脑子里有粑粑吗?
好,这其实也就是小问题,在网上搜索一下,我们就知道解决方案了。
我们再一次发挥了,面向谷歌的编程技能。
在代码中加上track by $index
就好了。
<ul>
<li ng-repeat="item in list track by $index">{{item}}</li>
</ul>
👌看起来不错。
但是继续写下去,嗯??为啥控制台打印出来的数组是正确的,但是展示在页面上的列表里的数据却是错的??
比如,当前有数组
inputlist = ['1', '', '2'];
在页面列表中展现的却是形如
------------- ---
| 1| | + |
------------- ---
------------- --- ---
| 2| | + | | - |
------------- --- ---
------------- --- ---
| 2| | + | | - |
------------- --- ---
啊,我真是灵魂画手。💐👏😳
所以到底是要怎样?(╯‵□′)╯┴─┴
把代码逻辑又检查了一遍,发现没有什么问题啊,那就是Angular的问题了。去网上一查,才发现,哦哟,跟刚刚那个问题可以说是一个派系的。
总的来说就是:
ng-Repeat不允许数组中存在两个相同Id的对象。
对于数字或者字符串等基本数据类型来说,它的id就是它自身的值。
因此数组中是不允许存在两个相同的数字的。
就在这时,我的脑子里,忽然闪现了一个念头,那把基本数据类型替换了引用类型不就好了吗?
chua chua chua 一通操作猛如虎。
搞定!打完收工!~
然后我本着认真学习的态度,继续去看刚刚那篇博客,发现了一句话:
建议不要在数组中使用基本数据类型作为元素
所以,请问Angular的程序员们脑子里是不是真的有粑粑💩??
佛曰:说不得…不如操起锤子直接砸