uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!
此文章懒得排版了,为了找出这个bug, 星期六的晚上我从9点查到0点多,此时我心中一万个草泥马在崩腾,超级想骂人!!!!!!!!!
@uniCloud
不想看我抱怨的直接去底部看总结就行
那么开始抱怨了:
事情是这样的,我今天去做路由拦截,用了uni.addInterceptor拦截器对["navigateTo", "redirectTo", "reLaunch", "switchTab"]进行拦截;
然后我tabbar有4个菜单(暂且叫做A,B,C,D吧), 拦截器写好后我测试,发现A,C,D之间都可以自由切换,但只要切到B后再切换其他tabbar页面A||B||C, 就会报错,且不能跳转到目标页:
switchTab: Missing required args: "url" uni-h5.es.js:2651
根据报错信息,我一开始以为我路由没配好,检查了好几次,发现还是报错;
然后我又去查是不是这个页面代码的问题,还是报错;
没办法只能拿出终极测试方法了 ---- >>> 注释代码!!!
注释js部分,还是报错!!!
注释自定义组件部分,正常了!!!!!:
1、删掉我写的自定义组件-->正常,恢复-->报错,此时我坚定的认为是还是我自己写的组件的问题;
2、于是我去把这个组件仔细查了下,没发现问题啊,由于我用了slot, 我猜是不是这个导致的?(此刻怀疑uniapp的种子埋下了)
3、然后我做了个简单demo, 简单的页面,简单的自定义组件,组件里放个slot, 页面导入使用,测试,正常跳转(抓狂);
4、上面测试没发现问题,于是我就去B页面注释掉自定义组件slot里的多个组件,唉,可以正常跳转,问题就在这了;
5、于是挨个注释里面的组件,最后发现是官方的uni-data-select组件导致的(罪魁祸首我以为是它,其实不是);
6、于是我就找到源码查看,一开始没发现什么,那么继续注释大法;
7、注释dom部分(不能跳转),注释script部分(正常跳转),然后依次注释methods, watch,computed,created,data,props (不能跳转)
8、注释mixins: [uniCloud.mixinDatacom || {}], 唉,唉唉唉,好了,问题找到了,就是这玩意儿,就是这sb玩意儿,我找了一晚上,就是这个导致上面那个错且路由不能跳转,坑爹玩意儿啊!
我想既然是这个uniCloud.mixinDatacom导致的,我先去app.vue或者main.js里先把它保存到window对象上看看,结果全部ABCD都不能切换了,后面发现只要是app.vue或者main.js里出现了uniCloud,哪怕是console.log打(uniCloud), 也出问题!
最后把uni-data-select里的mixins: [uniCloud.mixinDatacom || {}],注释掉不要了,props里补了个
collection: {
type: [String, Array],
default: '',
}
问题就解决了,此时也已经到了0点钟,此时我也一肚子气,此时我超级想骂人,此时.......
最后总结下:
当项目使用了uni.addInterceptor对路由switchTab进行拦截时,如果tabbar页面,或者tabbar页面使用的组件里有用到uniCloud,那么就会报错:switchTab: Missing required args: "url", 导致路由跳转不了。解决办法就是不用uniCloud,然后官方uni-组件缺什么就补什么,还是报错就去市场找类似组件替换掉;