需求:从A页面跳转到B页面,从B页面再返回至A页面,并传递参数。
1、使用sessionStorage或者localStorage
B页面返回之前将数据放置在sessionStorage里面
sessionStorage.setItem('searchKeyword', JSON.stringify({ fundname: '易方达基金', fundcode: '110011' }))
this.$router.go(-1)
返回到上一个页面之后,A页面拿到数据,再清空sessionStorage
const searchKeyword = JSON.parse(sessionStorage.getItem('searchKeyword'))
if (searchKeyword) {
sessionStorage.removeItem('searchKeyword')
}
2、beforeRouteLeave和beforeRouteEnter
B页面设置beforeRouteLeave,代码如下:
beforeRouteLeave (to, from, next) {
to.query.fundname = '易方达基金'
to.query.fundcode = '110011'
next()
}
A页面设置beforeRouteEnter,代码如下:
export default {
data () {
return {
fundname: '',
fundcode: ''
}
},
beforeRouteEnter (to, from, next) {
next(vm => {
vm.fundname = to.query.fundname
vm.fundcode = to.query.fundcode
})
}
}
3、vuex传值
- store文件配置
export default new Vuex.Store({
state: {
searchKeyword: {}
},
getters: {
searchKeyword: state => state.searchKeyword
},
mutations: {
SET_KEYWORD (state, payload) {
state.searchKeyword = payload
}
},
actions: {
setKeyword ({ commit }, value = {}) {
commit('SET_KEYWORD', value)
}
}
})
- B页面组件使用
this.$store.dispatch('setKeyword', JSON.stringify({ fundname: '易方达基金', fundcode: '110011' }))
- A页面组件使用
computed: {
...mapGetters({
searchKeyword: 'searchKeyword'
})
}
4、EventBus使用
EventBus 是一种用于实现发布-订阅模式的开源事件总线库。它可以用于在应用程序中不同组件之间进行解耦的事件通信。通过注册和发布事件,不同的组件可以订阅感兴趣的事件并在事件发生时接收通知。这种方式可以简化组件之间的通信和协作,提高代码的可维护性和可扩展性。在 Android 开发中,EventBus 经常被用来简化组件之间的通信。
用法:
- 在main.js中全局初始化
EventBus
Vue.prototype.$EventBus = new Vue()
- 在B页面组件中向EventBus发送事件
this.$EventBus.$emit('searchKeyword', JSON.stringify({ fundname: '易方达基金', fundcode: '110011' }))
this.$router.go(-1)
- 在A页面组件中接收事件
mounted () {
this.$EventBus.$on('searchKeyword', (data) => {
console.log(data)
})
}
- 移除监听
beforeDestroy () {
this.$EventBus.$off('searchKeyword')
}