国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue-router之路由鉤子函數(shù)應(yīng)用解析

這篇具有很好參考價值的文章主要介紹了vue-router之路由鉤子函數(shù)應(yīng)用解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

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

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

全局導(dǎo)航鉤子函數(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路由對象) 當(dāng)前導(dǎo)航正要離開的路由
next: (Function函數(shù)) 一定要調(diào)用該方法來 resolve 這個鉤子。 調(diào)用方法:next(參數(shù)或者空) ***必須調(diào)用
next:(無參數(shù)的時候): 進行管道中的下一個鉤子,如果走到最后一個鉤子函數(shù),那么 導(dǎo)航的狀態(tài)就是 confirmed (確認的)
next(‘/’) 或者 next({ path: ‘/’ }): 跳轉(zhuǎn)到一個不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進行一個新的導(dǎo)航。

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

router.beforeEach((to, from, next) => {
    if (to.meta.auth) {
        //判斷該路由是否需要登錄權(quán)限
        if (cookies('token')) {
            //如果存在token,則xxx,如果不存在,那跳轉(zhuǎn)回登錄頁
            next() //不要在next里面加"path:/", 會陷入死循環(huán),原因是router會終止當(dāng)前然后不斷地跳轉(zhuǎn)
        }
        else {
            next({
                path: '/login',
                query: {redirect: to.fullPath}//將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
            })
        }
    }
    else {
        next()
    }
})

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

//使用鉤子函數(shù)對路由進行權(quán)限跳轉(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){
        // 如果是管理員權(quán)限則可進入,這里只是簡單的模擬管理員權(quán)限而已
        role === 'admin' ? next() : next('/403');
    }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ù)當(dāng)前路由數(shù)據(jù)判斷能不能訪問:

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

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

4.組件內(nèi)的守衛(wèi)(組件實例內(nèi)的導(dǎo)航鉤子)
beforeRouteEnter:進入這個組件路由之前
beforeRouteLeave:離開這個組件路由
beforeRouteUpdate:再本路由的下級路由切換才會觸發(fā)beforeRouteUpdate

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

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

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

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

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

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

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

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

到了這里,關(guān)于vue-router之路由鉤子函數(shù)應(yīng)用解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue-router路由守衛(wèi)

    在我們使用vue-router的時候,路由守衛(wèi)就像監(jiān)聽器、攔截器一樣,幫我們做一些鑒權(quán)等操作,vue中的路由守衛(wèi)分為全局路由守衛(wèi)、獨享路由守衛(wèi)、組件內(nèi)的路由守衛(wèi) 全局路由守衛(wèi) :?beforeEach、 afterEach 組件獨享路由守衛(wèi) :beforeEnter、 beforeLeave 組件內(nèi)路由守衛(wèi) :beforeRouteEnter、

    2024年02月11日
    瀏覽(17)
  • 【Vue-Router】路由入門

    【Vue-Router】路由入門

    路由(Routing)是指確定網(wǎng)站或應(yīng)用程序中特定頁面的方式。在Web開發(fā)中,路由用于根據(jù)URL的不同部分來確定應(yīng)用程序中應(yīng)該顯示哪個內(nèi)容。 構(gòu)建前端項目 安裝依賴和路由 3. router 使用 login.vue reg.vue index.ts App.vue main.ts router-view 補充: router-view 是Vue Router提供的一個組件,用于

    2024年02月13日
    瀏覽(28)
  • vue-router(路由)詳細教程

    路由是一個比較廣義和抽象的概念,路由的本質(zhì)就是 對應(yīng)關(guān)系 。 在開發(fā)中,路由分為: ? 后端路由 ? 前端路由 后端路由 概念:根據(jù)不同的用戶 URL 請求,返回不同的內(nèi)容 本質(zhì):URL 請求地址與服務(wù)器資源之間的對應(yīng)關(guān)系 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將

    2024年02月04日
    瀏覽(21)
  • vue-router路由懶加載

    vue-router路由懶加載

    路由懶加載指的是打包部署時將資源按照對應(yīng)的頁面進行劃分,需要的時候加載對應(yīng)的頁面資源,而不是把所有的頁面資源打包部署到一塊。避免不必要資源加載。(參考vue項目實現(xiàn)路由按需加載(路由懶加載)的3種方式_小胖梅的博客-CSDN博客_vue懶加載?) 這里有三種方式可以

    2023年04月08日
    瀏覽(21)
  • vue-router路由模式詳解

    vue-router路由模式詳解

    目錄 一. vue-router(前端路由)有兩種模式,hash模式和history模式 二、路由模式解析 三、兩種模式的區(qū)別 1、hash模式 ?2、history路由 (3)popstate實現(xiàn)history路由攔截,監(jiān)聽頁面返回事件 一. vue-router(前端路由)有兩種模式,hash模式和history模式 1.hash 就是指 url 后面的 # 號以及后

    2024年02月03日
    瀏覽(34)
  • 【Vue-Router】路由傳參

    【Vue-Router】路由傳參

    list.json login.vue reg.vue App.vue index.ts reg.vue item?.name ,item?.price ,item?.id ,他們?nèi)绻皇褂每蛇x鏈操作符會出現(xiàn)報錯: \\\'__VLS_ctx.item\\\' is possibly \\\'undefined\\\'. login.vue 注意: 傳遞 params 參數(shù)時,若使用 to 的對象寫法,必須使用 name 配置項,不能用 path 。 傳遞 params 參數(shù)時,需要提前在規(guī)

    2024年02月13日
    瀏覽(20)
  • vue3使用vue-router嵌套路由(多級路由)

    vue3使用vue-router嵌套路由(多級路由)

    Vue3 嵌套路由的使用和 Vue2 相差不大,主要的區(qū)別是 Vue3 的路由實例化使用了 createApp() 方法,所以實例化路由時需要傳入根組件。另外,Vue3 的路由對象除了包含 Vue2 中的導(dǎo)航守衛(wèi)、導(dǎo)航鉤子和解析守衛(wèi)等功能外,還新增了 meta prop 和 route prop。 在使用嵌套路由時,建議將路由

    2024年02月03日
    瀏覽(29)
  • Vue3配置路由(vue-router)

    Vue3配置路由(vue-router)

    緊接上篇文章,vue3的配置與vue2是有所差別的,本文就講述了如何配置,如果本文對你有所幫助請三連支持博主。 下面案例可供參考 使用npm命令進行安裝 : npm install vue-router@4 完成后我們打開項目根目錄下的 package.json 文件: 如下即為成功 這里創(chuàng)建 view目錄,然后在view目錄

    2023年04月12日
    瀏覽(27)
  • 路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由(英文: router)就是 對應(yīng)關(guān)系 。 SPA指的是一個web網(wǎng)站只有唯一的一個HTML頁面, 所有組件的展示與切換 都在這唯一的一個頁面內(nèi)完成。此時, 不同組件之間的切換 需要通過 前端路由 來實現(xiàn)。 *結(jié)論:*在SPA項目中, 不同功能之間的切換 ,要 依賴于前端路由 來完成! 通俗

    2024年01月16日
    瀏覽(27)
  • Vue3的vue-router路由詳解

    Vue3的vue-router路由詳解

    這篇文章是接著【三分鐘快速搭建Vue3+webpack項目】的內(nèi)容做的開發(fā),有基礎(chǔ)的可以跳過?【三分鐘快速搭建Vue3+webpack項目】,直接看以下的內(nèi)容。 Vue3的vue-router路由詳解: 首先安裝路由依賴模塊: 所需代碼文件如下圖: 圖1 ? 所需要的主要文件: index.html、index.js、App.vue in

    2024年02月01日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包