工作中遇到的奇怪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的程序员们脑子里是不是真的有粑粑💩??


佛曰:说不得…不如操起锤子直接砸