因为涉及到h5端 如果直接用url的方式传参就会导致 一些变量直接显示在浏览器上,另外还会有长度限制。所以更改为了使用$emit和$on来进行通讯 但是看了官网的文档,我的理解如下:
如果要从一个A页面跳转到B页面;那么就需要在B页面进行$on操作,只有 这样才能接受到$emit发射的数据,简而言之就是要使用emit前 需要在新页面有一个对应的$on来接受,所以$on执行顺序要放在$emit前,
先前我的代码是```javascript
uni.navigateTo({
url: url,
success() {
uni.$emit('Data', {
options: option,
})
}
})
然后再B页面进行接受```javascript
uni.$once("trackData", (options) => {
console.log(options)
})
这么做确实能拿到数据 ,但是就是渲染不出来数据 用浏览器的VUE控制台调试工具看了一下 页面的data里面根本就没有附上值,但是打印对应的data上的属性却可以打印出来,尝试在外层定义 var that=this,还是不行,就不是this指向的问题
随后进行百度 说是在$emit是套一个延迟函数 确实可以解决,但是总感觉哪里乖乖的 success()不就是在跳转完成后指向的吗,为什么还要在此处包裹一个延迟函数才可以通讯成功。
最后在吐槽一下 文档写的有点那啥 官网的文档https://uniapp.dcloud.io/collocation/frame/communication?id=once 并没有说一下注意事项 而在论坛里https://ask.dcloud.net.cn/article/36010 却有。 大部分人应该都是先看文档 出了问题才会去百度, 这等于是留了个坑
0 个回复