vue路由複習(轉載)

回頭看 vue-router 複習

個人github iSAM2016javascript

目錄

中途有一段時間去隔壁家的php玩了一遭,回頭看來,vuex、vue-router有了改變,一開始就對vue-route的細節不是很瞭解,今天總結一下。php

官網的例子:html

本身的一句話:vue

  1. 定義路由組件(汽車)java

    const Foo = { template: 'git

    foo
    ' }
    const Bar = { template: '
    bar
    '

     

  2. 定義路由(公路或導航)github

    cost ruter = {
    { path: '/foo', component: Foo },
    { path: '/bar', component: Bar }
    }vue-router

  3. 建立實例(紅路燈)vuex

    cosnt app = new Vue({
    router}).$mount('#app')django

動態的路由匹配

一個頁面是常常重複使用的,傳遞一個參數就能夠了,好比傳遞一個ID號baidu.com?userId=123,這樣
就須要一個動態的路由來解決。

cost ruter = {
     { path: '/user:12', component: user } }

當一個路由使用是後面有動態的參數,會映射到this.$router.param 中,這是函數體內調用路由的方法

響應路由參數的變化

由於沒有仔細看官網的實例,這點沒有看待,我遇到一次坑。此次教訓並非粗心,是由於沒有仔細看文檔的好習慣,這個很差的習慣必須的改。就像數學老師說的迴歸到基本理論

這也是一個常見的問題,我問須要監聽hash值的改變,來查詢參數如:

  • book/search?cat=1
  • book/search?cat=2

但是隻有參數發生了改變,vue-router 認爲組件式能夠重用的,參數變化是不能引發重新向服務器獲取數據

const user = { wacth: { '$route' (to, from) { // 對路由變化做出響應... } } }

嵌套路由

像這樣的的嵌套 /user/foo/profile

<div id="root"> <router-view> </router-view> </div>

<router-view>是最頂層的出口,渲染最高級路由匹配到的組件。一樣地,一個被渲染
組件一樣能夠包含本身的嵌套

const router = new VueRouter({  routes: [ { path: '/user/:id', component: User,  children: [ // UserHome will be rendered inside User's <router-view> // when /user/:id is matched { path: '', component: UserHome }, // UserProfile will be rendered inside User's <router-view> // when /user/:id/profile is matched { path: 'profile', component: UserProfile }, // UserPosts will be rendered inside User's <router-view> // when /user/:id/posts is matched { path: 'posts', component: UserPosts } ] } ] })

注意 this.$route 和 this.router在使用上是有區別的

this.$router.push()
調用的方法
    // 字符串 this.$router.push('home') // 對象 this.$router.push({ path: 'home' }) // 命名的路由 this.$router.push({ name: 'user', params: { userId: 123 }}) // 帶查詢參數,變成 /register?plan=private this.$router.push({ path: 'register', query: { plan: 'private' }}) 
this.$router.go(n)

意思是在 history 記錄中向前或者後退多少步

路由的命名

能夠爲路由設置,別名方便使用。如設置name, isshow

const router = new VueRouter({
 routes: [ {  path: '/user/:userId',  name: 'user',  isShow: false  component: User } ] })
路由的命名:示例

切換路由的時候能夠修改頁面的標題

router.afterEach(transition => {
    document.title = transition.name })

導航鉤子

導航鉤子

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

主要用來攔截導航,讓他完成跳轉或取消。
參數:
to :Route: 標識即將進入的目標路由對象
from: Route 當前導航正要離開的路由
next: function 調用該方法來resolve 鉤子,它的參數:

  • next(): 進行管道中的下一個鉤子
  • next(false): 中斷當前的導航
  • next('/') 或者 next({ path: '/' }): 跳轉到一個不一樣的地址。當前的導航被中斷,而後進行一個新的導航。
實例:檢測用戶登陸

全局的鉤子主要用來是,判斷用戶是否登陸

router.beforeEach((to, from, next) => { //頁面滾動到頂部 window.scroll(0, 0); //用戶沒有登陸了,而且還想訪問別的頁面,強制跳轉login頁 if (!auth.login() && to.path !== '/login') { next('login'); } else { //用戶已經登陸了,不在讓用戶訪問login頁 if (auth.login() && to.path === '/login') { next({ path: '/demo/user/list' }); } else { next(); } } })
某個路由獨享的鉤子(VIP組件)
const router = new VueRouter({ routes: [ path: '/foo', component: Foo, beforeEach: (to, from, next) => { } ] })

路由元信息

較難理解

咱們稱呼routers 配置中的每一個路由對象爲路由記錄。路由記錄能夠是嵌套的。好比
http://localhost:3000/#/demo/user/list
這個地址中能夠說明路由記錄有三個,分別是:

  • /demo
  • /demo/use
  • /demo/use/list



一個路由匹配到的多有路由記錄暴露在$route對象當中的$route.matched 數組當中,咱們須要遍歷 $route.matched 來檢查路由記錄中的 meta 字段。

示例

路由對象信息

對象出現的地方,注意是route 沒有r結尾

route Object出現的地方
router.match(location)
this.$route
全局鉤子

對象的屬性就不書寫了見路由信息對象的屬性

Router 實例

Router注意是 有r結尾
Router 實例屬性

$router.options

在$router 中有個鬼是$router.options 官網沒有找到,說明。
這個屬性包含了路由的樹形結構,能夠藉助這個來實現menu層級的劃分



 

 轉載
相關文章
相關標籤/搜索