在vue實(shí)戰(zhàn)中認(rèn)識的vue-router

初衷

最近想嘗試一下vue框架的使用荣赶,但是沒有足夠的時(shí)候一點(diǎn)點(diǎn)去看它的具體使用,就找了一個(gè)實(shí)戰(zhàn)的網(wǎng)課看了一下,主要是vue2+vant重归,并跟著做了一遍,vue和angular相似的地方還是比較多的厦凤,具體的使用我也不打算記錄了鼻吮,簡單的記錄一下vue-router的配置吧~(主要是肉體可知的記憶力在下降,不得不進(jìn)行爛筆頭行動(dòng)??)

vue-router的安裝

npm install vue-router --save-dev

項(xiàng)目結(jié)構(gòu)目錄中路由文件的介紹

image

我們使用vue-cli生成我們的項(xiàng)目結(jié)構(gòu)泳唠,src/router/index.js文件就是路由的核心文件狈网,我們來簡單看一下這個(gè)文件是怎么樣統(tǒng)籌整個(gè)項(xiàng)目路由的~
image

通過這些路由的配置我們就可以通過http://localhost:8080/#/registerhttp://localhost:8080/#/login分別訪問到注冊和登錄頁面啦~

使用<router-link>標(biāo)簽來制作導(dǎo)航

<template>
  <div id="app">
    // 模板插入位置
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

<style>
#app {
  background-color: #fefefe;
}
</style>

// 1.像普通a標(biāo)簽一樣進(jìn)行路由的跳轉(zhuǎn)
  <p>導(dǎo)航 :
   <router-link to="/">首頁</router-link>
   <router-link to="/register">注冊頁面</router-link>
  </p>

// 2.業(yè)務(wù)邏輯代碼中笨腥,可以通過使用編程式路由進(jìn)行跳轉(zhuǎn)
    this.$router.push('/register')

vue-router配置子路由

使用場景

其實(shí)在日常開發(fā)中配置子路由是很常見的一種情況拓哺,當(dāng)某個(gè)頁面隸屬于某個(gè)模板的時(shí)候我們就需要配置子路由了~
以我最近實(shí)戰(zhàn)的項(xiàng)目為例子,我希望在首頁上有個(gè)可以切換不同內(nèi)容的footer組件脖母,這些切換的內(nèi)容就是作為首頁的子路由士鸥,


image

我們來看一下相關(guān)代碼的配置:

import Vue from 'vue'
import Router from 'vue-router'
import ShoppingMall from '@/components/pages/ShoppingMall' // @符號就是表示src
import  Register from '@/components/pages/Register'
import Login from '@/components/pages/Login'
import Goods from '@/components/pages/Goods'
import CategoryList from '@/components/pages/CategoryList'
import Cart from '@/components/pages/Cart'
import Member from '@/components/pages/Member'
import Main from '@/components/pages/Main'

Vue.use(Router)

export default new Router({
routes: [
  {
    path: '/',
    name: 'Main',
    component: Main,
    // 這里的子路由會加載到父組件main的router插槽中
    children: [            //children組件就是專門來配置子路由的啦
      {
        path: '/',
        name: 'ShoppingMall',
        component: ShoppingMall
      },
      {
        path: '/categoryList',
        name: 'CategoryList',
        component: CategoryList
      },
      {
        path: '/cart',
        name: 'Cart',
        component: Cart
      },
      {
        path: '/member',
        name: 'Member',
        component: Member
      }
    ]
  },
  // 這里的路由會加載到app中的router插槽中
  {
    path: '/register',
    name: 'Register',
    component: Register
  },
  {
    path: '/login',
    name: 'Login',
    component: Login
  },
  {
    path: '/goods',
    name: 'Goods',
    component: Goods
  },
]
})

vue-router的參數(shù)傳遞

參數(shù)傳遞同樣是一個(gè)很基本的業(yè)務(wù),日常開發(fā)中頁面的跳轉(zhuǎn)谆级,通過Url傳參烤礁,大家在實(shí)際使用中也是經(jīng)常碰到的吧~ 我們來看看vue提供幾種路由傳參的形式~

通過name傳遞參數(shù)

1.路由配置
routes: [
  {
    path: '/',
    name: 'Register',   // 配置name屬性
    component: Register
  }
]

2.頁面獲取
<p>{{ $route.name }}</p> // 通過$route.name進(jìn)行接收

通過<router-link>標(biāo)簽中的to傳參

其實(shí)我們多數(shù)傳參是不用name進(jìn)行傳參的,我們用<router-link>標(biāo)簽中的to屬性進(jìn)行傳參肥照,需要注意的是這里的to要進(jìn)行一個(gè)綁定脚仔,寫成:to

1.標(biāo)簽上直接設(shè)置
<router-link :to="{name:'Register',params:{key:value}}">value</router-link>

2.頁面獲取
<p>{{$route.params.username}}</p> // 在使用的模板中接收

name:就是我們在路由配置文件中起的name值。
params:就是我們要傳的參數(shù)舆绎,它也是對象形勢鲤脏,在對象里可以傳遞多個(gè)值。

通過url進(jìn)行傳參

:冒號的形式傳遞參數(shù)
1. 路徑上設(shè)置
 {
   path:'/params/:newsId/:newsTitle',
   component:Params
 }

2.頁面上傳入相關(guān)參數(shù)
<router-link to="/params/168/set params">params</router-link>

3.頁面獲取
<template>
  <div>
      <h2>{{ msg }}</h2>
      <p>新聞ID:{{ $route.params.newsId}}</p>
      <p>新聞標(biāo)題:{{ $route.params.newsTitle}}</p>
  </div>
</template>
編程式導(dǎo)航的params進(jìn)行參數(shù)的傳遞
1. 在函數(shù)中傳入?yún)?shù)(2種形式)
  1.1 this.$router.push({name: 'Goods', params:{goodsId: id}}) //使用name就得用戶編程式導(dǎo)航的params進(jìn)行參數(shù)的傳遞
  1.2 this.$router.push({path:'/Goods', query: {goodsId: this.goodsId}}) // 如果使用的時(shí)候path: /goods則使用的就是query 


2.接收的地方(一般是在created生命周期函數(shù)里,根據(jù)傳入的形式不同猎醇,獲取也是不同的)
this.goodsId = this.$route.query.goodsId ?  this.$route.query.goodsId :  this.$route.params.goodsId

單頁面多路由區(qū)域的操作

這種就是在一個(gè)頁面上窥突,有多個(gè)路由區(qū)域,我們直接通過截圖硫嘶,看看相關(guān)代碼


image

路由的配置


image

vue-router的重定向

當(dāng)我們在開發(fā)中阻问,設(shè)置的路徑不一樣,卻希望跳轉(zhuǎn)的頁面是相同的沦疾,這個(gè)時(shí)候我們就需要使用路由重定向了

基本重定向

  //  只需要將原來的component換成redirect參數(shù)
  export default new Router({
  routes: [
    {
      path: '/',
      component: Hello
    },{
      path:'/register',
      component:Register
    },{
      path:'/goback',  // 直接redirect到path:’/’路徑下
      redirect:'/'
    }

  ]
})

重定向時(shí)傳遞參數(shù)

// 只需要在redirect后邊的參數(shù)里復(fù)制重定向路徑的path參數(shù)就可以
export default new Router({
routes: [
      {
        path: '/',
        component: Hello
      },{
      // Vue的是支持在路徑中使用正則表達(dá)式的称近,我們只需要用()進(jìn)行包裹,這里就表示只能使用戶數(shù)字類型的Id
        path:'/params/:newsId(\\d+)',
        component:Params
      },{
        path:'/goParams/:newsId(\\d+)',
        redirect:'/params/:newsId(\\d+)'
      }
]
})

路由別名alias

使用alias別名的形式曹鸠,我們也可以實(shí)現(xiàn)類似重定向的效果煌茬。

1. 配置
{
  path: '/menu',
  component: Menu,
  alias:'/list'   // 頁面顯示的路徑仍然是/list 但是UI加載是是menu組件
}

2.使用
 <router-link to="/list">jspang</router-link>

redirect和alias的區(qū)別

redirect:redirect是直接改變了用戶輸入的url的值,把url變成了真實(shí)指向的path路徑彻桃。
alias:用戶輸入的url路徑?jīng)]有被改變坛善,這種情況更友好,讓用戶知道自己訪問的路徑邻眷,只是改變了UI的內(nèi)容眠屎。

alias使用的注意事項(xiàng)

別名請不要用在path為'/'中,vue不支持這樣使用

路由的過渡動(dòng)畫效果

// 想讓路由有過渡動(dòng)畫,需要在<router-view>標(biāo)簽的外部添加<transition>標(biāo)簽肆饶,標(biāo)簽還需要一個(gè)name屬性
<transition name="fade">
  <router-view ></router-view>
</transition>

fade-enter: 進(jìn)入過渡的開始狀態(tài)改衩,元素被插入時(shí)生效,只應(yīng)用一幀后立刻刪除驯镊。
fade-enter-active: 進(jìn)入過渡的結(jié)束狀態(tài)葫督,元素被插入時(shí)就生效,在過渡過程完成后移除板惑。
fade-leave: 離開過渡的開始狀態(tài)橄镜,元素被刪除時(shí)觸發(fā),只應(yīng)用一幀后立刻刪除冯乘。
fade-leave-active: 離開過渡的結(jié)束狀態(tài)洽胶,元素被刪除時(shí)生效,離開過渡完成后被刪除裆馒。

匹配404

{
 path:'*', // 表示找不到對應(yīng)路徑的時(shí)候 則加載Error頁面
 component:Error
}

路由鉤子

我們知道一個(gè)組件從進(jìn)入到銷毀有很多的鉤子函數(shù)姊氓,同樣在路由中也有鉤子函數(shù)。路由的鉤子選項(xiàng)可以寫在路由配置文件中喷好,也可以寫在我們的組件模板中

1.當(dāng)寫在路由配置文件中
2.在路由文件中我們只能寫一個(gè)beforeEnter,就是在進(jìn)入此路由配置時(shí),先來看一段具體的代碼:

{
    path:'/params/:newsId(\\d+)',
    component: Params,
    beforeEnter:(to,from,next)=>{
      console.log('我進(jìn)入了params模板');
      console.log(to);
      console.log(from);
      next();
}

to: 路由將要跳轉(zhuǎn)的路徑信息翔横,信息是包含在對像里邊的。
from: 路徑跳轉(zhuǎn)前的路徑信息梗搅,也是一個(gè)對象的形式棕孙。
next: 路由的控制參數(shù),常用的有next(true)和next(false)些膨。

// 在組件模板中使用
export default {
name: 'params',
data () {
  return {
    msg: 'params page'
  }
},
beforeRouteEnter:(to,from,next)=>{
  console.log("準(zhǔn)備進(jìn)入路由模板");
  next();
},
beforeRouteLeave: (to, from, next) => {
  console.log("準(zhǔn)備離開路由模板");
  next();
}
}
</script>

beforeRouteEnter:在路由進(jìn)入前的鉤子函數(shù)蟀俊。
beforeRouteLeave:在路由離開前的鉤子函數(shù)。

總結(jié)

大概就記錄這些吧~ 用到的時(shí)候就翻過來看看???♀? 之前專注力不好的時(shí)候订雾,我感覺記錄是最能讓我聚精會神的肢预,但是今天還是走神了~ 如有出錯(cuò),還請指出??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洼哎,一起剝皮案震驚了整個(gè)濱河市烫映,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噩峦,老刑警劉巖锭沟,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異识补,居然都是意外死亡族淮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門凭涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祝辣,“玉大人,你說我怎么就攤上這事切油◎保” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵澎胡,是天一觀的道長孕荠。 經(jīng)常有香客問我,道長攻谁,這世上最難降的妖魔是什么稚伍? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮巢株,結(jié)果婚禮上槐瑞,老公的妹妹穿的比我還像新娘。我一直安慰自己阁苞,他們只是感情好困檩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著那槽,像睡著了一般悼沿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骚灸,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天糟趾,我揣著相機(jī)與錄音,去河邊找鬼。 笑死义郑,一個(gè)胖子當(dāng)著我的面吹牛蝶柿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播非驮,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼交汤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劫笙?” 一聲冷哼從身側(cè)響起芙扎,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎填大,沒想到半個(gè)月后戒洼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡允华,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年圈浇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片例获。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汉额,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出榨汤,到底是詐尸還是另有隱情蠕搜,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布收壕,位于F島的核電站妓灌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜜宪。R本人自食惡果不足惜虫埂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望圃验。 院中可真熱鬧掉伏,春花似錦、人聲如沸澳窑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摊聋。三九已至鸡捐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間麻裁,已是汗流浹背箍镜。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工源祈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人色迂。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓香缺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脚草。 傳聞我的和親對象是個(gè)殘疾皇子赫悄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353