记一个Vue项目中的双向绑定和异步导致的Bug

最近赶项目,一周上7天班每天还得搞到十点十一点,实在是没有精力再看书了。
但是写项目的时候碰到的一个Bug完全超出了我的知识范围,我隐隐感觉如果解决了应该会让我对JS有更好的认识,于是没有求助大佬,恳求给我些时间来解决。大佬正忙着也不想弄什么疑难杂症于是同意了。我可得好好看看这玩意什么毛病再写个博客记一记了........
Bug是这样的:

gif1

做了一个选择本月、本年、全部的部分,但是很奇怪,调的都是同样一个函数只是传参不同,点击本月、本年后可以正常的把展示的样式改为点击后的 ,但是全部却点击不上。

pic2

可以看到,我是用dateBtnChoose这个变量来进行选择判断的。二话不说先Console。

pic3

先在本月后面加了dateBtnChoose的调用,然后再在调用的函数里写了console.奇怪的事情发生了。

gif5

发生了我根本无法理解的事情,同样一个函数传参,同样的显示,参数是1、2时正常,但是参数为3的时候可以确定type=3,dateBtnChoose同样等于3,但是dateBtnChoose显示出来居然是0?排查之后发现,也没有对dateBtnChoose=3进行判断的部分,也就是说根本不是代码里进行操作导致的Bug.

png4

开始头疼了。排查了半天无果,向大佬求助,大佬看了一下给了提示:“双向绑定”。

于是开始思考。已知这些值是双向绑定的....有什么问题吗?苦苦思索,有哪里把dateBtnChoose置0了吗?找了一遍,发现日期input框中@change绑定的@dateSelectClear只有一行:

this.dateBtnChoose= 0;

于是尝试删除@change,发现问题没有了。但需求是,如果我手动在UI的日期框输入了日期,那么按钮选择置0,这个@change不能随便删除。再仔细想想,我大概明白是怎么一回事了。

在点击button后,调用了函数selectsearchDate(type),此时将this.dateBtnChoose的值置为type.但是selectsearchDate这个函数同样操作了绑定在el-date-picker上的this.searchParamsObj,这个操作会引起el-date-picked的改变,继而触发@change,然后触发函数dateSelectClear,将this.dateBtnChoose置0.

那么怎么解决呢?想了半天,有点束手无策。问大佬,大佬提示:“你傻吗,加个读写开关不就行了。”

大概明白怎么做了。加入一个读写开关值isBtnStatus,在值change的时候做读写保护。

使用值isBtnStatus:

pic5

只有当isBtnStatus不为1时,才在触发@change的时候将dataBtnChoose置为0,并在触发@change后将isBtnStatus置为0.

pic6

在selectsearchDate中加入对isBtnStatus值的操作。赋值之后,将isBtnStatus置0。因为!this.isBtnStatus的值为0,接下来对startdate和enddate的操作并不会触发@change中的置0,而在对startdate和enddate进行操作、触发@change后,重新将isBtnStatus置0.此时的@change再进行触发,即可为正常值。

但是,又发现了一个新的问题,那就是点击多次以后偶尔会出现点击日期框后按钮样式并未转变的问题。

点击多次以后会出现偶尔有一次,点击一个按钮后,通过更改日期值并没有办法将按钮值清零。出现频率大概是点击7-8次出现一次。这下我就确实有些不知如何是好了,于是无奈又只能请教大佬。

大佬看了以后陷入了沉思。语重心长的给了我提示:“这么明显的异步请求问题都看不出来?执行完选择后加个setTimeout不就好了吗?是不是傻?”

我感觉大佬说的很对。searchByType()函数调用了接口,js进行异步执行,此时会出现接口还在调取中,

this.searchParamsObj.StartTime=startdate;

this.searchParamsObj.EndTime=enddate;

这两句还没有执行完,就直接执行

this.isBtnStatus = 0;

然后接口又调到数据了,触发@change,血崩,功能失效。

于是我把函数改成:

pic8

终于没有问题了,感动。

这次的Bug还是让我感到有点惭愧的,这么多基础知识居然理解的这么浅薄,碰到实际问题就蠢的找不着北,真鸡儿丢人......

默默刷Vue官方文档去了....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容