Vue Router2

導(dǎo)航守衛(wèi)

“導(dǎo)航”表示路由正在發(fā)生改變务嫡。

全局前置守衛(wèi)

router.beforeEach

const router = new VueRouter({ ... })

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

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: truename: 'home' 之類的選項(xiàng)以及任何用在 router-linkto proprouter.push 中的選項(xiàng)铃绒。

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

全局解析守衛(wèi)

這和 router.beforeEach 類似颠悬,區(qū)別是在導(dǎo)航被確認(rèn)之前,同時(shí)在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后定血,解析守衛(wèi)就被調(diào)用赔癌。

router.afterEach((to, from) => {
  // ...
})
路由獨(dú)享的守衛(wèi)

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

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})
組件內(nèi)的守衛(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)航離開(kāi)該組件的對(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)有必要了鉴腻。

路由元信息

meta

path: 'bar',
          component: Bar,
          // a meta field
          meta: { requiresAuth: true }

使用就是 $route.meta.requires

過(guò)渡動(dòng)效

<router-view> 是基本的動(dòng)態(tài)組件,所以我們可以用 <transition> 組件給它添加一些過(guò)渡效果

<transition>
  <router-view></router-view>
</transition>
單個(gè)路由的過(guò)渡

上面的用法會(huì)給所有路由設(shè)置一樣的過(guò)渡效果百揭,如果你想讓每個(gè)路由組件有各自的過(guò)渡效果爽哎,可以在各路由組件內(nèi)使用 <transition> 并設(shè)置不同的 name。

const Foo = {
  template: `
    <transition name="slide">
      <div class="foo">...</div>
    </transition>
  `
}

const Bar = {
  template: `
    <transition name="fade">
      <div class="bar">...</div>
    </transition>
  `
}
基于路由的動(dòng)態(tài)過(guò)渡

還可以基于當(dāng)前路由與目標(biāo)路由的變化關(guān)系器一,動(dòng)態(tài)設(shè)置過(guò)渡效果:

<!-- 使用動(dòng)態(tài)的 transition name -->
<transition :name="transitionName">
  <router-view></router-view>
</transition>
// 接著在父組件內(nèi)
// watch $route 決定使用哪種過(guò)渡
watch: {
  '$route' (to, from) {
    const toDepth = to.path.split('/').length
    const fromDepth = from.path.split('/').length
    this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
  }
}

滾動(dòng)行為

當(dāng)切換到新路由時(shí)课锌,想要頁(yè)面滾到頂部,或者是保持原先的滾動(dòng)位置,就像重新加載頁(yè)面那樣渺贤。
scrollBehavior (to, from, savedPosition)

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return 期望滾動(dòng)到哪個(gè)的位置
  }
})
這個(gè)方法返回滾動(dòng)位置的對(duì)象信息雏胃,長(zhǎng)這樣:

{ x: number, y: number }
{ selector: string, offset? : { x: number, y: number }} (offset 只在 2.6.0+ 支持)

如果返回一個(gè) falsy,或者是一個(gè)空對(duì)象志鞍,那么不會(huì)發(fā)生滾動(dòng)瞭亮。

路由懶加載

當(dāng)路由被訪問(wèn)的時(shí)候才加載對(duì)應(yīng)組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市固棚,隨后出現(xiàn)的幾起案子统翩,更是在濱河造成了極大的恐慌,老刑警劉巖此洲,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂汗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡呜师,警方通過(guò)查閱死者的電腦和手機(jī)娶桦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汁汗,“玉大人衷畦,你說(shuō)我怎么就攤上這事∨鲈停” “怎么了霎匈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)送爸。 經(jīng)常有香客問(wèn)我铛嘱,道長(zhǎng),這世上最難降的妖魔是什么袭厂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任墨吓,我火速辦了婚禮,結(jié)果婚禮上纹磺,老公的妹妹穿的比我還像新娘帖烘。我一直安慰自己,他們只是感情好橄杨,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布秘症。 她就那樣靜靜地躺著,像睡著了一般式矫。 火紅的嫁衣襯著肌膚如雪乡摹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天采转,我揣著相機(jī)與錄音聪廉,去河邊找鬼瞬痘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛板熊,可吹牛的內(nèi)容都是我干的框全。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼干签,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼津辩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起容劳,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丹泉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鸭蛙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筋岛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年娶视,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睁宰。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肪获,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柒傻,到底是詐尸還是另有隱情孝赫,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布红符,位于F島的核電站青柄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏预侯。R本人自食惡果不足惜致开,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萎馅。 院中可真熱鬧双戳,春花似錦、人聲如沸糜芳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)峭竣。三九已至塘辅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邪驮,已是汗流浹背莫辨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沮榜。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓盘榨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蟆融。 傳聞我的和親對(duì)象是個(gè)殘疾皇子草巡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361