当前位置: 首页 > Web前端 > vue.js

iview-页面复用时根据路由参数刷新数据

时间:2023-04-01 11:47:23 vue.js

iview-重用页面时根据路由参数刷新数据的方法(show/edit/new),页面完成后,有一个问题,就是打开一个新的编辑页面时,显示的数据还是原来的数据之前的id,新的页面也是这样。可能是iview设置了keep-alive,页面数据被缓存,没有触发拉取数据的接口。所以考虑使用监听路由的方式,在钩子函数中根据id的变化自动拉取数据。参考vue路由守卫,主要使用beforeRouteEnter和beforeRouteUpdate这两个钩子函数。当打开新标签页时,将触发beforeRouteEnter。这个时候没有建dom,也不能调用this,但是可以用next的回调函数解决。在已有的tab之间切换时,不会触发beforeRouteEnter,但会触发beforeRouteUpdate,然后使用watch监听id的变化。如果id更新了,接口watch将被调用:{id:{handler(newval){//console.log('wat-id',newval)if(this.id){this.getDetail()}else{this.clearData()}}}},beforeRouteEnter(to,from,next){constid=to.query.bannerIdnext((vm)=>{//直接vm.id不触发watchif(id){vm.id=idvm.getDetail()}else{vm.clearData()}})next()},beforeRouteUpdate(to,from,next){this.id=to.query.bannerIdnext()},如果在beforeRouteEnterhook函数中只设置了vm.id=id,希望在watch函数中监听id的变化,有时候OK是不行的,所以把更新数据的方法放在next回调中进步。无论是beforeRouteEnter还是beforeRouteUpdate,都必须调用next()方法,否则程序不会进行下去。