问题
这个bug是上个月遇到的,和市面上的数组、深层嵌套导致的双向绑定都不一样
事情是这样的,我们做了两个大屏页面,一个是9K分辨率,一个是5K。内容和接口是一样的,只是9K的展示的多一点。
具体业务不说了,遇到bug的地方是地图上的视频点位,点击获取视频流赋值到我们的视频组件里,组件用的liveqing,视频流是flv。
赋值语句也很简单:this.rawHtml = res.result.flvuri
然后奇葩的事来了,9K大屏下视频组件没获取到src,不播放,而同样代码的5K大屏没毛病。
一系列debug后,发现值拿到了,并且存到data里是成功的,也就是this.rawHtml 是有值的,但是组件里没获取到。
也就是双向绑定失效了??然而this.$forceUpdate()也没用。
真正的一筹莫展啊,组里N个前端外加别的组喊了外援一起review代码,只得出一个结论:代码没毛病(有毛病的话5K大屏也不会没问题了)
我们都开始怀疑视频组件是不是有bug了,离谱的事又来了,9K上地图打点的分类勾选那里,勾选没反应。一轮测试后发现其实有反应,但是双向绑定的:class,没效果,导致看不到打的勾。
又又又是这个双向绑定问题
解决方法
解决其实也不难,vue双向绑定不行,就dom操作呗。vue还是留了ref给我们用来操作dom的
// 赋值视频src
this.$refs.play01.videoUrl = res.result.flvuri
// 控制勾选类名
this.$refs['icon'+e].classList.toggle('checked')
原因分析
出现这种bug的原因?
真的不清楚啊。。9K和5K大屏的唯一区别其实就是屏幕更大,展示内容更多,难道是因为东西太多了,内存不够什么的导致的vue的bug?
等一波大佬教学