#uni.$on()和uni.$emit()
- uniapp和vue不同的是,vue数据传递直接是单向的,通过eventBus来实现,uniapp已经封装了全局的api.
- vue示例
- Vue.prototype.$bus = new Vue();
- uniapp示例
uni.$emit('selectAccount',{accountInfo:JSON.parse(JSON.stringify(accountInfo))})uni.$on('selectAccount',(data)=>{console.log('接收的数据:' + data);})注意:在页面关闭时在onUnload生命周期中卸载,uni.$off();
#globalData
globalData: {data: ''}获取:getApp().globalData.data设置:getApp().globalData.data = '';
#store
详情查看:https://www.yuque.com/along-n3gko/ezt5z9/kd11ug
#subNvue页面向vue页面传递数据
//两种获取子窗体不同方式const subNVue = uni.getSubNVueById('map_widget');const subNVue = uni.getCurrentSubNVue();//发送subNVue.postMessage({type: 'message',title: '我是来自 subNVue 子窗体的消息',content: 'Hello, map_widget'});//监听subNVue.onMessage((res) => {const data = res.data;});
#页面跳转传递数据
let data = {};uni.navigateTo({url: 'url?data' + data})接收onLoad(option) {console.log(option);}
#nvue向vue通讯
//可以使用uni.$emit和uni.$on进行通讯//通过应用生命周期在App.vue中进行监听nvue页面uni.postMessage({test: "数据",value:"数据"})app.vue页面onUniNViewMessage:function(e){console.log(JSON.stringify(e.data))}
#vue向nvue页面通讯
- 在 vue 里使用 plus.webview.postMessageToUniNView(data,nvueId) 发送消息,data 为 JSON 格式(键值对的值仅支持String),nvueId 为 nvue 所在 webview 的 id ``` //vue发送数据
//nvue接收数据
const globalEvent = weex.requireModule(‘globalEvent’); created() { globalEvent.addEventListener(“plusMessage”, e => { console.log(e.data); if (e.data.num) { //存在num时才赋值,在nvue里调用uni的API也会触发plusMessage事件,所以需要判断需要的数据是否存在 this.num = e.data.num } }); }
```
