亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue-router之路由鉤子函數(shù)應用小結(jié)

 更新時間:2024年01月19日 08:33:56   作者:kirinlau  
vue-router提供的導航鉤子主要用來攔截導航,讓它完成跳轉(zhuǎn)或取消,本文主要介紹了vue-router之路由鉤子函數(shù)應用小結(jié),具有一定的參考價值,感興趣的可以了解一下

vue-router是vue開發(fā)中不可或缺的一部分,也是vue全家桶生態(tài)的重要部分,平時開發(fā)vue時會高頻率使用,那么它除了在routes上的應用外,還有一些鉤子函數(shù)具體可以應用在哪些地方呢

路由的鉤子函數(shù)共有6個
全局的路由鉤子函數(shù):beforeEach、afterEach
單個的路由鉤子函數(shù):beforeEnter
組件內(nèi)的路由鉤子函數(shù):beforeRouteEnter、beforeRouteLeave、beforeRouteUpdate

下面我就這些鉤子函數(shù)做具體解釋

全局導航鉤子函數(shù)

1. vue router.beforeEach(全局前置守衛(wèi))

beforeEach的鉤子函數(shù),它是一個全局的before 鉤子函數(shù),beforeEach在每次每一個路由改變的時候都得執(zhí)行一遍。
它的三個參數(shù):

  • to: (Route路由對象) 即將要進入的目標 路由對象 to對象下面的屬性: path params query hash fullPath matched name meta(在matched下,但是本例可以直接用)
  • from: (Route路由對象) 當前導航正要離開的路由
  • next: (Function函數(shù)) 一定要調(diào)用該方法來 resolve 這個鉤子。 調(diào)用方法:next(參數(shù)或者空) ***必須調(diào)用
  • next(無參數(shù)的時候): 進行管道中的下一個鉤子,如果走到最后一個鉤子函數(shù),那么 導航的狀態(tài)就是 confirmed (確認的)
  • next(‘/’) 或者 next({ path: ‘/’ }): 跳轉(zhuǎn)到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。

應用場景:可進行一些頁面跳轉(zhuǎn)前處理,例如判斷需要登錄的頁面進行攔截,做登錄跳轉(zhuǎn)

router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth) {
        //判斷該路由是否需要登錄權限
        if (cookies('token')) {
            //通過封裝好的cookies讀取token,如果存在,name接下一步如果不存在,那跳轉(zhuǎn)回登錄頁
            next()//不要在next里面加"path:/",會陷入死循環(huán)
        }
        else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}//將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
            })
        }
    }
    else {
        next()
    }
})

進入新的頁面時作登錄判斷、管理員權限判斷、瀏覽器判斷等

//使用鉤子函數(shù)對路由進行權限跳轉(zhuǎn)
router.beforeEach((to, from, next) => {
    const role = localStorage.getItem('ms_username');
    if(!role && to.path !== '/login'){
        next('/login');
    }else if(to.meta.permission){
        // 如果是管理員權限則可進入,這里只是簡單的模擬管理員權限而已
        role === 'admin' ? next() : next('/403');
    }else{
        // 簡單的判斷IE10及以下不進入富文本編輯器,該組件不兼容
        if(navigator.userAgent.indexOf('MSIE') > -1 && to.path === '/editor'){
            Vue.prototype.$alert('vue-quill-editor組件不兼容IE10及以下瀏覽器,請使用更高版本的瀏覽器查看', '瀏覽器不兼容通知', {
                confirmButtonText: '確定'
            });
        }else{
            next();
        }
    }
})

2. vue router.afterEach(全局后置守衛(wèi))

router.afterEach是頁面加載之后,跟router.beforeEach一樣,區(qū)別是router.beforeEach是頁面加載之前執(zhí)行,而router.afterEach是頁面加載之后執(zhí)行

3. beforeEnter 路由獨享的守衛(wèi)(路由內(nèi)鉤子)

獨享路由守衛(wèi)beforeEnter配置在指定路由中的, 你可以在route配置上直接定義 beforeEnter 守衛(wèi):

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]

再比如根據(jù)當前路由數(shù)據(jù)判斷能不能訪問:

const routes = [
  {
    path: '/about',
    name: 'About',
    component: About,
    meta:{ isAuth: false, title:"關于" },
    children:[
    	{
    		path: '/detail',
    		name: 'Detail',
    		component: Detail,
    		meta:{ isAuth: false, title:"詳情" },
    		beforeEnter:(to,from,next) =>{
				if(to.meta.isAuth){
					if(localStorage.getItem('user')){
						next()//調(diào)用next才會往下走
					}
				}else{
					alert("無權限")
				}
    		}
    	}
    ]
  }
]

注意:如果記錄有重定向?qū)傩?,則 beforeEnter 無效。

4.組件內(nèi)的守衛(wèi)(組件實例內(nèi)的導航鉤子)

  • beforeRouteEnter:進入這個組件路由之前
  • beforeRouteLeave:離開這個組件路由
  • beforeRouteUpdate:再本路由的下級路由切換才會觸發(fā)beforeRouteUpdate
const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應路由被 confirm 前調(diào)用
    // 不!能!獲取組件實例 `this`
    // 因為當鉤子執(zhí)行前,組件實例還沒被創(chuàng)建
  },
  beforeRouteUpdate (to, from, next) {
    // 在當前路由改變,但是該組件被復用時調(diào)用
    // 舉例來說,對于一個帶有動態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時候,
    // 由于會渲染同樣的 Foo 組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調(diào)用。
    // 可以訪問組件實例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 導航離開該組件的對應路由時調(diào)用
    // 可以訪問組件實例 `this`
  }

實際應用就是組件創(chuàng)建、離開、更新等
beforeRouteEnter是支持給next傳遞回調(diào)的唯一守衛(wèi),回調(diào)的參數(shù)就是當前組件實例,如下:

beforeRouteEnter(to, from, next) {
	console.log("beforeRouteEnter");
	next(vm => {
		console.log("vm", vm);  //vm就是當前組件this
		console.log("data:", vm.data) // 可以獲取當前組件的data
		vm.testFun()   //可以執(zhí)行當前組件的方法
	});
}

beforeRouteLeave應用場景就是在銷毀當前組件時觸發(fā)的處理都可以添加在該鉤子函數(shù)中,比如組件中有定時器時, 在路由進行切換的時候, 可使用beforeRouteLeave將定時器進行清理掉,以免內(nèi)存泄漏,造成StackOverflowError的錯誤

beforeRouteLeave (to, from, next) {  
 window.clearInterval(this.timer) //清楚定時器   
 next()
 }

再比如當頁面中有未關閉的窗口, 或未保存的內(nèi)容時, 阻止頁面跳轉(zhuǎn)next(false)
如果頁面內(nèi)有重要的信息需要用戶保存后才能進行跳轉(zhuǎn)

beforeRouteLeave (to, from, next) {
    localStorage.setItem(name, content); //保存到localStorage中
    next()
}

這就是vue-router鉤子函數(shù)的基礎應用,當然還有很多其他的應用角度。
比如beforeRouteEnter可以結(jié)合keep-alive可以實現(xiàn)增加用戶體驗和節(jié)省資源的同時獲取鉤子節(jié)點。
組件在創(chuàng)建時會觸發(fā)created,但是每次進入路由時都會觸發(fā)beforeRouteEnter,所以,當一個頁面使用了keep-alive進行了緩存時,離開這個頁面后再次進入時,不會再觸發(fā)created,但是會觸發(fā)beforeRouteEnter,這時候就可以使用路由鉤子進行處理了。

到此這篇關于vue-router之路由鉤子函數(shù)應用小結(jié)的文章就介紹到這了,更多相關vue-router 路由鉤子 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vite+vue3中使用mock模擬數(shù)據(jù)問題

    vite+vue3中使用mock模擬數(shù)據(jù)問題

    這篇文章主要介紹了vite+vue3中使用mock模擬數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vue中兩種生成二維碼(帶logo)并下載方式總結(jié)

    Vue中兩種生成二維碼(帶logo)并下載方式總結(jié)

    與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關于Vue中兩種生成二維碼(帶logo)并下載的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • vue3+vite實現(xiàn)在線預覽pdf功能

    vue3+vite實現(xiàn)在線預覽pdf功能

    這篇文章主要為大家詳細介紹了如何通過vue3和vite實現(xiàn)在線預覽pdf功能,文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以學習一下
    2023-10-10
  • Vue框架中如何調(diào)用模擬數(shù)據(jù)你知道嗎

    Vue框架中如何調(diào)用模擬數(shù)據(jù)你知道嗎

    這篇文章主要為大家詳細介紹了Vue框架中如何調(diào)用模擬數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 基于Vue實現(xiàn)微信小程序的圖文編輯器

    基于Vue實現(xiàn)微信小程序的圖文編輯器

    這篇文章主要介紹了基于Vue實現(xiàn)微信小程序的圖文編輯器,由于微信小程序不能使用常規(guī)的圖文編輯器(比如百度的UEditor )編輯新聞內(nèi)容之類的,所以用vue寫了個針對小程序用的圖文編輯器需要的朋友可以參考下
    2018-07-07
  • 使用vue打包時vendor文件過大或者是app.js文件很大的問題

    使用vue打包時vendor文件過大或者是app.js文件很大的問題

    這篇文章主要介紹了使用vue打包時vendor文件過大或者是app.js文件很大問題的解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Vue狀態(tài)管理工具Pinia的安裝與使用教程

    Vue狀態(tài)管理工具Pinia的安裝與使用教程

    這篇文章主要介紹了Vue狀態(tài)管理工具Pinia的安裝與使用,一步一步學習如何將pinia運用到項目實戰(zhàn)中去,文中有詳細的安裝教程和使用方法,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Vue移動端用淘寶彈性布局lib-flexible插件做適配的方法

    Vue移動端用淘寶彈性布局lib-flexible插件做適配的方法

    這篇文章主要介紹了Vue移動端用淘寶彈性布局lib-flexible插件做適配的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 詳解Vue與VueComponent的關系

    詳解Vue與VueComponent的關系

    這篇文章主要為大家介紹了Vue與VueComponent的關系,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 最新Vue過濾器介紹及使用方法

    最新Vue過濾器介紹及使用方法

    過濾器是vue為開發(fā)者提供的功能,常用于文本的格式化,過濾器應該被添加在JavaScrip表達式的尾部,由“管道符”進行調(diào)用,這篇文章通過案例給大家講解Vue過濾器介紹及使用方法,需要的朋友參考下吧
    2022-11-11

最新評論