uniapp怎么实现App双向监听,当我触发事件,另一方面可以收到我触发的事件
时间: 2024-04-14 17:27:53 浏览: 153
在uni-app中,您可以通过全局事件总线或者Vuex来实现App双向监听,当您触发事件时,另一方面可以收到您触发的事件。
1. 使用全局事件总线:
在main.js文件中创建一个全局的Vue实例,并使用它作为事件总线:
```javascript
// main.js
import Vue from 'vue'
Vue.prototype.$eventBus = new Vue()
```
在需要发送事件的组件中,使用`$emit`方法触发自定义事件,并将需要传递的数据作为参数传递:
```javascript
// ComponentA.vue
export default {
methods: {
triggerEvent() {
this.$eventBus.$emit('myEvent', 'Hello from Component A')
}
}
}
```
在需要接收事件的组件中,使用`$on`方法监听自定义事件,并定义一个回调函数处理接收到的事件:
```javascript
// ComponentB.vue
export default {
created() {
this.$eventBus.$on('myEvent', this.handleEvent)
},
destroyed() {
this.$eventBus.$off('myEvent', this.handleEvent)
},
methods: {
handleEvent(data) {
console.log(data) // 输出 'Hello from Component A'
}
}
}
```
通过全局事件总线,Component B可以监听并接收到Component A触发的事件。
2. 使用Vuex:
在store中定义一个状态,用于存储需要共享的数据:
```javascript
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
eventData: ''
},
mutations: {
setEventData(state, data) {
state.eventData = data
}
},
actions: {
triggerEvent(context, data) {
context.commit('setEventData', data)
}
}
})
export default store
```
在需要发送事件的组件中,通过dispatch方法触发一个action:
```javascript
// ComponentA.vue
export default {
methods: {
triggerEvent() {
this.$store.dispatch('triggerEvent', 'Hello from Component A')
}
}
}
```
在需要接收事件的组件中,通过mapState将store中的eventData映射到组件的计算属性中,实时监听数据的变化:
```javascript
// ComponentB.vue
import { mapState } from 'vuex'
export default {
computed: {
...mapState(['eventData'])
},
watch: {
eventData(newValue) {
console.log(newValue) // 输出 'Hello from Component A'
}
}
}
```
通过Vuex,Component B可以实时监听并接收到Component A触发的事件。
以上是在uni-app中实现App双向监听的两种方式,您可以根据自己的需求选择其中一种来实现。
阅读全文