先后创建两个页面,A页面与B页面,需要将A页面的数据传递给B页面。
最初我在A页面设置一个点击事件,点击该事件执行以下方法
Bus.$emit('option', this.option1)
this.$router.push('/bigechart')
在B页面中created中接收A页面传来的数据
Bus.$on('option', (message) => {
let optionm = JSON.stringify(message)
sessionStorage.setItem('optionc', optionm)
console.log(sessionStorage.getItem('optionc'))
})
这时出现了问题,B页面报错,接收不到数据,当我再次返回A页面再跳转B页面时,数据可以接收到。所以,推测是执行顺序,也就是vue的组件执行的顺序出现了问题,果不其然。
当我执行A页面的点击事件的时 ,B页面还未生成,也就是B页面的created中监听A事件传递数据的方法还没有被触发,所以即使A页面传递数据,B页面也是接收不到的(B页面没有监听到)
所以,我可以将A页面的数据放到beforeDestroy方法去执行,当A页面销毁前传递B页面。具体执行顺序如下:
1.点击A页面的事件跳转到B页面
bigchar () {
//this.$router.push('/bigechart')
this.$router.push('/bigechart')
}
2.B页面组件执行created,也就是我们写的$on事件已经触发了
3.接着便是A组件被销毁
beforeDestroy () {
Bus.$emit('option', this.option1)
},