久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      vue的導(dǎo)航守衛(wèi)都有哪些

      導(dǎo)航守衛(wèi)有:1、全局前置守衛(wèi)“beforeEach”;2、全局解析守衛(wèi)“beforeResolve”;3、路由獨(dú)享的守衛(wèi)“beforeEnter”;4、組件內(nèi)的守衛(wèi)“beforeRouteEnter”、“beforeRouteLeave”。

      vue的導(dǎo)航守衛(wèi)都有哪些

      本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。

      vue-router 提供的導(dǎo)航守衛(wèi)主要用來(lái)通過(guò)跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。有多種機(jī)會(huì)植入路由導(dǎo)航過(guò)程中:全局的, 單個(gè)路由獨(dú)享的, 或者組件級(jí)的。

      記住參數(shù)或查詢的改變并不會(huì)觸發(fā)進(jìn)入/離開的導(dǎo)航守衛(wèi)。你可以通過(guò)觀察 $route 對(duì)象來(lái)應(yīng)對(duì)這些變化,或使用 beforeRouteUpdate 的組件內(nèi)守衛(wèi)。

      全局前置守衛(wèi)

      你可以使用 router.beforeEach 注冊(cè)一個(gè)全局前置守衛(wèi):

      const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => {   // ... })

      當(dāng)一個(gè)導(dǎo)航觸發(fā)時(shí),全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用。守衛(wèi)是異步解析執(zhí)行,此時(shí)導(dǎo)航在所有守衛(wèi) resolve 完之前一直處于 等待中。

      每個(gè)守衛(wèi)方法接收三個(gè)參數(shù):

      • to: Route: 即將要進(jìn)入的目標(biāo) 路由對(duì)象

      • from: Route: 當(dāng)前導(dǎo)航正要離開的路由

      • next: Function: 一定要調(diào)用該方法來(lái) resolve 這個(gè)鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

        • next(): 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。

        • next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了 (可能是用戶手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。

        • next('/') 或者 next({ path: '/' }): 跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。你可以向 next 傳遞任意位置對(duì)象,且允許設(shè)置諸如 replace: true、name: 'home' 之類的選項(xiàng)以及任何用在 router-link 的 to prop 或 router.push 中的選項(xiàng)。

        • next(error): (2.4.0+) 如果傳入 next 的參數(shù)是一個(gè) Error 實(shí)例,則導(dǎo)航會(huì)被終止且該錯(cuò)誤會(huì)被傳遞給 router.onError() 注冊(cè)過(guò)的回調(diào)。

      確保 next 函數(shù)在任何給定的導(dǎo)航守衛(wèi)中都被嚴(yán)格調(diào)用一次。它可以出現(xiàn)多于一次,但是只能在所有的邏輯路徑都不重疊的情況下,否則鉤子永遠(yuǎn)都不會(huì)被解析或報(bào)錯(cuò)。這里有一個(gè)在用戶未能驗(yàn)證身份時(shí)重定向到 /login 的示例:

      // BAD router.beforeEach((to, from, next) => {   if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })   // 如果用戶未能驗(yàn)證身份,則 `next` 會(huì)被調(diào)用兩次   next() }) // GOOD router.beforeEach((to, from, next) => {   if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })   else next() })

      全局解析守衛(wèi)

      2.5.0 新增

      在 2.5.0+ 你可以用 router.beforeResolve 注冊(cè)一個(gè)全局守衛(wèi)。這和 router.beforeEach 類似,區(qū)別是在導(dǎo)航被確認(rèn)之前,同時(shí)在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后,解析守衛(wèi)就被調(diào)用。

      路由獨(dú)享的守衛(wèi)

      你可以在路由配置上直接定義 beforeEnter 守衛(wèi):

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

      這些守衛(wèi)與全局前置守衛(wèi)的方法參數(shù)是一樣的。

      組件內(nèi)的守衛(wèi)

      最后,你可以在路由組件內(nèi)直接定義以下路由導(dǎo)航守衛(wèi):

      • beforeRouteEnter

      • beforeRouteUpdate (2.2 新增)

      • beforeRouteLeave

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

      beforeRouteEnter 守衛(wèi) 不能 訪問(wèn) this,因?yàn)槭匦l(wèi)在導(dǎo)航確認(rèn)前被調(diào)用,因此即將登場(chǎng)的新組件還沒(méi)被創(chuàng)建。

      不過(guò),你可以通過(guò)傳一個(gè)回調(diào)給 next來(lái)訪問(wèn)組件實(shí)例。在導(dǎo)航被確認(rèn)的時(shí)候執(zhí)行回調(diào),并且把組件實(shí)例作為回調(diào)方法的參數(shù)。

      beforeRouteEnter (to, from, next) {   next(vm => {     // 通過(guò) `vm` 訪問(wèn)組件實(shí)例   }) }

      注意 beforeRouteEnter 是支持給 next 傳遞回調(diào)的唯一守衛(wèi)。對(duì)于 beforeRouteUpdate 和 beforeRouteLeave 來(lái)說(shuō),this 已經(jīng)可用了,所以不支持傳遞回調(diào),因?yàn)闆](méi)有必要了。

      beforeRouteUpdate (to, from, next) {   // just use `this`   this.name = to.params.name   next() }

      這個(gè)離開守衛(wèi)通常用來(lái)禁止用戶在還未保存修改前突然離開。該導(dǎo)航可以通過(guò) next(false) 來(lái)取消。

      beforeRouteLeave (to, from, next) {   const answer = window.confirm('Do you really want to leave? you have unsaved changes!')   if (answer) {     next()   } else {     next(false)   } }

      完整的導(dǎo)航解析流程

      • 導(dǎo)航被觸發(fā)。

      • 在失活的組件里調(diào)用 beforeRouteLeave 守衛(wèi)。

      • 調(diào)用全局的 beforeEach 守衛(wèi)。

      • 在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi) (2.2+)。

      • 在路由配置里調(diào)用 beforeEnter。

      • 解析異步路由組件。

      • 在被激活的組件里調(diào)用 beforeRouteEnter。

      • 調(diào)用全局的 beforeResolve 守衛(wèi) (2.5+)。

      • 導(dǎo)航被確認(rèn)。

      • 調(diào)用全局的 afterEach 鉤子。

      • 觸發(fā) DOM 更新。

      • 調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù),創(chuàng)建好的組件實(shí)例會(huì)作為回調(diào)函數(shù)的參數(shù)傳入。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)