如果使用this.$router.push()跳转页面,可以在路由钩子beforeRouteLeave中使用先将需要保留的信息利用sessionStorage.setItem保存一份
例如:
beforeRouteLeave(to,from,next){
if(to.name=='nextPage'){
sessionStorage.setItem('currentPage',this.page)
sessionStorage.setItem('currentPageSize',this.pageSize)
sessionStorage.setItem('searchForm',JSON.stringify(this.dataForm))
}else{
sessionStorage.setItem('currentPage',1)
sessionStorage.setItem('currentPageSize',10)
let dataForm={name:'',age:''}
sessionStorage.setItem('searchForm',JSON.stringify(dataForm))
}
next()
}
再在created里获取一下获取保存的这些信息
if(sessionStorage.getItem('currentPage')){
this.page=sessionStorage.getItem('currentPage')
}
if(sessionStorage.getItem('currentPageSize')){
this.pageSize=sessionStorage.getItem('currentPageSize')
}
if(sessionStorage.getItem('searchForm')){
this.dataForm=sessionStorage.getItem('searchForm')
}
有可能出现当前页不更新的问题,可以在分页组件上绑定当前页和每页条数,再设置v-if="pageshow",data里pageshow初始值是true,在created里先将this.pageshow=false
this.getData();this.$nextTick(()=>{this.pageshow=true}),
如果使用window.open()打开另一个页面,再返回操作
在主页面的时候,将需要的信息带过去
let _url=this.$router.resolve({
name:'nextPage',
query:{
page:this.page,
pageSize:this.pageSize,
pageName:'mainPage',
searchForm:JSON.stringify(this.dataForm)
}
})
window.open(_url.href,'_blank')
在nextPage页面返回的时候,使用this.$router.push({name:`${this.$route.query.pageName}`,params:{page:`${this.$route.query.page}`,pageSize:`${this.$route.query.pageSize}`,search:`${this.$route.query.searchForm}`,}})
在mainPage主页面使用路由钩子beforeRouteEnter
beforeRouteEnter(to,from,next){
next(vm=>{
if(from.name=="nextPage"){
vm.page=to.params.page
vm.pageSize=to.params.pageSize
vm.dataForm=JSON.parse(to.params.searchForm)
vm.pageshow=false
vm.getData()
vm.nextTick(()=>{
vm.pageshow=true
})
}else{
vm.getData()
}
})
}
这种情况下,created里请求数据的方法需要注销掉。