1.場景vue
在處理列表時,經常有刪除一條數據或者新增數據以後須要從新刷新當前頁面的需求。vue-router
2.遇到的問題瀏覽器
1. 用vue-router從新路由到當前頁面,頁面是不進行刷新的app
2.採用window.reload(),或者router.go(0)刷新時,整個瀏覽器進行了從新加載,閃爍,體驗很差ide
3.解決方法this
provide / inject 組合spa
做用:容許一個祖先組件向其全部子孫後代注入一個依賴,不論組件層次有多深,並在起上下游關係成立的時間裏始終生效。code
App.vue:router
聲明reload方法,控制router-view的顯示或隱藏,從而控制頁面的再次加載blog
1 <template> 2 <div id="app"> 3 <router-view v-if="isRouterAlive"></router-view> 4 </div> 5 </template> 6 7 <script> 8 export default { 9 name: 'App', 10 provide(){ 11 return{ 12 reload:this.reload, 13 } 14 }, 15 data(){ 16 return{ 17 isRouterAlive:true, 18 } 19 }, 20 methods:{ 21 reload(){ 22 this.isRouterAlive = false ; 23 this.$nextTick(function(){ 24 this.isRouterAlive = true ; 25 }) 26 } 27 } 28 } 29 </script>
tableList.vue:
在頁面注入App.vue組件提供(provide)的 reload 依賴,在邏輯完成以後(刪除或添加...),直接this.reload()調用,便可刷新當前頁面。
1 export default { 2 inject:['reload'],//注入reload方法 3 data() { 4 return{} 5 }, 6 methods:{ 7 add(){ 8 .then(res => { 9 if (res.err_code == 0) { //數據請求成功後 10 this.reload() //調用reload方法刷新當前頁面 11 } 12 }) 13 .catch(res => { 14 console.log(res); 15 }); 16 } 17 } 18 }