Vue中的路由 Router

Vue中的路由 Router

Vue Router 是 Vue.js 官方的路由管理器阅悍。它和 Vue.js 的核心深度集成鸡典,讓構(gòu)建單頁面應(yīng)用變得易如反掌俩滥。

單頁應(yīng)用SPA

所謂單頁應(yīng)用眠副,指的是在一個頁面上集成多種功能肪康,甚至整個系統(tǒng)就只有一個頁面尼斧,所有的業(yè)務(wù)功能都是它的子模塊姜贡,通過特定的方式掛接到主界面上。它是AJAX技術(shù)的進一步升華棺棵,把AJAX的無刷新機制發(fā)揮到極致楼咳,因此能造就與桌面程序媲美的流暢用戶體

單頁應(yīng)用SPA 實現(xiàn)

頁面切換:瀏覽器地址欄哈希值控制隱藏顯示div

頁面加載:通過ajax動態(tài)獲取

路由視圖結(jié)構(gòu)

存放頁面 <router-view>

切換路由 <router-link>

路由配置

{
    path: '/about',  // 路由連接地址 和router-link to值對應(yīng)
    name: 'Home', // 路由的名稱 
    component: Home 
    // 路由頁面使用的組件被填充的router-view里面的組件              
},

路由參數(shù)配置

  1. 動態(tài)路徑參數(shù)

    // 配置
    {
    path:“/produce/:id”
    name:"produce"
    component:Produce
    }
    // 跳轉(zhuǎn)鏈接
    <router-link to="/produce/123">Go</router-link>
    /*
    :id就是給路由配置的參數(shù)
    當(dāng)匹配到一個路由時,參數(shù)值會被設(shè)置到 this.route.params 使用route.params.id獲取參數(shù)
    */

  2. 查詢字符串參數(shù)

    <router-link to="/produce?id=123">Go</router-link>

router和route區(qū)別

  1. $route
    • Object類型對象
    • 內(nèi)部有params 第一種路由傳參 /detail/:id /detail/101 this.$route.params.id
    • query 路由傳參 第二種 ?redirect=carts this.$route.query.redirect
    • path 路由路徑
    • meta 路由攜帶數(shù)據(jù) { meta:{ auth:true,name:aiva } }
  2. $router 一個VUE的路由對象
    • this.$router.push(“目標路由”)
    • this.$router.go(-1) 回退

路由導(dǎo)航

  • router.push
    push方法會向 history 棧添加一個新的記錄烛恤,所以母怜,當(dāng)用戶點擊瀏覽器后退按鈕時,則回到之前的 URL
    該方法的參數(shù)可以是一個字符串路徑缚柏,或者一個描述地址的對象

    // 字符串
    router.push('home')

    // 對象
    router.push({ path: 'home' })

    // 命名的路由
    router.push({ name: 'user', params: { userId: '123' }})

    // 帶查詢參數(shù)苹熏,變成 /register?plan=private
    router.push({ path: 'register', query: { plan: 'private' }})

  • router.replace
    router.replace跟 router.push 很像,唯一的不同就是币喧,它不會向 history 添加新記錄轨域,而是跟它的方法名一樣 —— 替換掉當(dāng)前的 history 記錄。

    this.$router.replace("home")

  • router.go
    這個方法的參數(shù)是一個整數(shù)杀餐,意思是在 history 記錄中向前或者后退多少步干发,類似 window.history.go(n)。

      this.$router.go(1)  // 前進1步
      this.$router.go(-1) // 后退1步
    

跳轉(zhuǎn)

<router-link to=/home">首頁</router-link> 
<router-link :to="{ path: 'home' }">Home</router-link> 
<router-link :to="{ name: 'produce', params: { id: 123 }}">
產(chǎn)品123
</router-link>

重定向

{ path: '/home', redirect: '/' }

別名

    { path: '/a', component: A, alias: '/b' }

404

{path: '*'// 會匹配所有路徑}

路由高亮

.router-link-active

全局配置 <router-link> 默認的激活的 class

.router-link-exact-active

全局配置當(dāng)鏈接被精確匹配的時候應(yīng)該激活的 class

路由嵌套

路由可以嵌套史翘,一個被渲染路由組件同樣可以包含自己的嵌套 <router-view>

  • 要在嵌套的出口中渲染組件枉长,需要在 VueRouter 的參數(shù)中使用 children 配置

    const router = new VueRouter({
    routes: [
    { path: '/user/:id', component: User,
    children: [
    {
    // 當(dāng) /user/:id/profile 匹配成功,
    // UserProfile 會被渲染在 User 的 <router-view> 中
    path: 'profile',
    component: UserProfile
    },
    {
    // 當(dāng) /user/:id/posts 匹配成功
    // UserPosts 會被渲染在 User 的 <router-view> 中
    path: 'posts',
    component: UserPosts
    }
    ]
    }
    ]
    })

要注意琼讽,以 / 開頭的嵌套路徑會被當(dāng)作根路徑必峰。嵌套的路由不需要使用'/'

路由權(quán)限控制

beforeEach() 全局前置守衛(wèi) 進入前調(diào)用

afterEach() 全局后置鉤子 進入后調(diào)用

每個守衛(wèi) 三個參數(shù):

  • to: Route: 即將要進入的目標 路由對象
  • from: Route: 當(dāng)前導(dǎo)航正要離開的路由
  • next: 一定要調(diào)用該方法來路由才會切換。
  • next() 直接進入下個路由
  • next(false) 路由回到from頁面
  • next('/') 路由跳轉(zhuǎn)到首頁

路由元信息

給路由配置額外的信息

{ path:"/cart",
    ...    
    meta:{requireAuth:true}
}
// $route.meta.requireAuth 獲取

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

  • beforeRouteEnter 進入前 (沒有this)

  • beforeRouteUpdate 參數(shù)更新是

  • beforeRouteLeave 路由離開前

    const Foo = {
    template: ...,
    beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應(yīng)路由被 confirm 前調(diào)用
    // 不钻蹬!能自点!獲取組件實例 this
    // 因為當(dāng)守衛(wèi)執(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
    }
    }

路由過渡

<transition>
  <router-view></router-view>
</transition>

組件緩存

<keep-alive>
  <router-view  v-if="$route.meta.keep" />
</keep-alive>
  <router-view v-if="!$route.meta.keep" />

路由懶加載

component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粗仓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子设捐,更是在濱河造成了極大的恐慌借浊,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝招,死亡現(xiàn)場離奇詭異蚂斤,居然都是意外死亡,警方通過查閱死者的電腦和手機槐沼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門曙蒸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岗钩,你說我怎么就攤上這事纽窟。” “怎么了兼吓?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵臂港,是天一觀的道長。 經(jīng)常有香客問我视搏,道長审孽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任凶朗,我火速辦了婚禮瓷胧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棚愤。我一直安慰自己搓萧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布宛畦。 她就那樣靜靜地躺著瘸洛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪次和。 梳的紋絲不亂的頭發(fā)上反肋,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音踏施,去河邊找鬼石蔗。 笑死罕邀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的养距。 我是一名探鬼主播诉探,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棍厌!你這毒婦竟也來了肾胯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耘纱,失蹤者是張志新(化名)和其女友劉穎敬肚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束析,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡艳馒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畸陡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹰溜。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丁恭,靈堂內(nèi)的尸體忽然破棺而出曹动,到底是詐尸還是另有隱情,我是刑警寧澤牲览,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布墓陈,位于F島的核電站,受9級特大地震影響第献,放射性物質(zhì)發(fā)生泄漏贡必。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一庸毫、第九天 我趴在偏房一處隱蔽的房頂上張望仔拟。 院中可真熱鬧,春花似錦飒赃、人聲如沸利花。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炒事。三九已至,卻和暖如春蔫慧,著一層夾襖步出監(jiān)牢的瞬間挠乳,已是汗流浹背诀豁。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工侄非, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搅方,地道東北人悦屏。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像威蕉,于是被迫代替她去往敵國和親刁俭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容