VUE-6:路由vue-router1瞻想、router-view

VUE路由

????????當(dāng)應(yīng)用變得復(fù)雜以后,我們就需要通過一種便捷娩嚼、高效的方式來管理應(yīng)用蘑险,最常見的就是通過路由

????????路由:把?url?與?應(yīng)用中的對應(yīng)的組件進行關(guān)聯(lián),通過不同的?url?訪問不同的組件

vue-router?的安裝

????????npm?i?vue-router

????????????OR

????????yarn?add?vue-router

Vue.use()

????????通過前面提到的?Vue.use?方法岳悟,把?vue-router?安裝到指定的?Vue?實例中

創(chuàng)建路由對象

????????通過?vue-router?提供的?Router?構(gòu)造函數(shù)(類)創(chuàng)建路由對象佃迄,路由對象包含了當(dāng)前使用的模式(hash、history)贵少、路由信息

????????(url?與?組件的對應(yīng)關(guān)系)等信息

import?Router?from?'vue-router';

import?Home?from?'./views/Home.vue';

import?Home?from?'./views/About.vue';

const?myRouter?=?new?Router({

??mode:?'history',

??routes:?[

????{

??????path:?'/',

??????component:?Home

????},

????{

??????path:?'/about',

??????component:?About

????}

??]

});

...,

new?Vue({

??...,

??router:?myRouter

});

router-view?組件

????????配置了路由信息以后呵俏,我們還需要頁面(組件)中指定路由對應(yīng)的組件出現(xiàn)的位置,當(dāng)當(dāng)前訪問的?url?與某個路由信息匹配的時候滔灶,

????????該組件就會出現(xiàn)在?router-view?組件所在的位置

//?App.vue

<template>

??<div?id="app">

????<div?id="nav">

??????<router-link?to="/">Home</router-link>?|

??????<router-link?to="/about">About</router-link>

????</div>

????<hr>

????<router-view/>

??</div>

</template>

路由配置案例:

main.js

異步請求

????????在實際的應(yīng)用開發(fā)中普碎,與后端交互,進行異步請求是很常見的需求

axios安裝

? ??????npm?i?axios

請求

跨域

????????vue-cli?提供了一個內(nèi)置基于?node?的?webserver?录平,我們可以使用它提供的?proxy?服務(wù)來進行跨域請求代理

vue.config.js

????????在項目的根目錄下創(chuàng)建一個?vue.config.js?的文件麻车,通過?`npm?run?serve`?啟動服務(wù)的時候缀皱,會讀取該文件

跨域請求代理配置

//?vue.config.js

module.exports?=?{

??devServer:?{

????proxy:?{

??????'/api':?{

????????target:?'http://localhost:7777',

????????pathRewrite:?{

??????????'^/api':?''

????????}

??????}

????}

??}

}

修改配置文件,需要重啟服務(wù):`npm?run?serve`

//?home.vue

<script>

...

created()?{

??axios({

????url:?'/api/items'

??}).then(res?=>?{

????this.items?=?res.data;

??});

}

...

</script>

動態(tài)路由

????????有的時候动猬,我們需要把滿足某種規(guī)則的路由全部匹配到同一個組件啤斗,比如不同的商品的?url

????????我們不可能為每一個商品都定義一個獨立的組件,而是把它們都映射到同一個組件赁咙,同時?url?后面的部分為動態(tài)變化的部分钮莲,我們會

????????在設(shè)計路由的時候進行特殊的處理

? ? ? ? 其中?`:itemId`?表示匹配的?url?中動態(tài)部分內(nèi)容,如上面的?1,2,3?等彼水,同時該值將被賦值給路由的變量?itemId

路由對象

????????vue-router?會在組件中添加(注入)兩個屬性

????????????????-?$router

????????????????-?$route

$router?對象

????????該對象其實就是?new?VueRouter(...)?得到的路由對象臂痕,通過該對象我們可以訪問全局路由信息,調(diào)用路由下的方法猿涨,

????????比如:`go`握童、`back`、`push`?等

$route?對象

????????通過該對象可以訪問與當(dāng)前路由匹配的信息

$route.params

????????獲取動態(tài)路由有關(guān)的信息

Detail.vue


router/index.js


router/index.js
apis.js

queryString(叛赚?后面的東西)

????????有的時候澡绩,我們可能也會用到?queryString

$route.query

????????我們可以通過路由對象?$route?的?query?屬性來獲取?queryString

編程式導(dǎo)航

????????有的時候,我們可能需要用到編程的方式來導(dǎo)航(跳轉(zhuǎn))俺附,而不是點擊鏈接肥卡。如:當(dāng)?`sort`?發(fā)生改變的時候跳轉(zhuǎn)

路由組件的復(fù)用

????????為了提高性能,增強路由組件的復(fù)用事镣,當(dāng)路由切換使用的是同一個組件的時候步鉴,則會復(fù)用該路由組件,而不是銷毀重建璃哟,這個時候氛琢,

????????我們就需要通過?watch?或者?路由相關(guān)的生命周期函數(shù)來處理切換路由導(dǎo)致的變化

watch

????????如果切換的路由復(fù)用了組件,這個時候随闪,我們可以使用?watch?監(jiān)聽?$route

????????????????to?:?改變之后的?$route?對象

? ? ? ? ? ? ? ? from?:?改變之前的?$route?對象

但是我們可以使用?vue-router?提供路由守衛(wèi)(路由有關(guān)的生命周期函數(shù))來處理路由有關(guān)的業(yè)務(wù)邏輯

路由守衛(wèi)

????????當(dāng)導(dǎo)航發(fā)生改變的時候阳似,vue-router?會在多個不同的地方調(diào)用指定的函數(shù),也就是與路由有關(guān)的生命周期函數(shù)铐伴,也稱為:路由守衛(wèi)

????????????????-?組件內(nèi)守衛(wèi)

????????????????-?路由獨享守衛(wèi)

????????????????-?全局守衛(wèi)

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

????????定義在組件內(nèi)的與路由有關(guān)的生命周期函數(shù)(守衛(wèi))

????????????????-?beforeRouteEnter

????????????????-?beforeRouteUpdate

????????????????-?beforeRouteLeave

beforeRouteEnter

????????當(dāng)路由解析完成撮奏,并中指定的組件渲染之前(組件?`beforeCreate`??之前),這里不能通過?`this`?訪問組件實例当宴,需要通過

?????????`next`?回調(diào)來進行調(diào)用

Home.vue

beforeRouteUpdate

????????在當(dāng)前路由改變畜吊,但是該組件被復(fù)用時調(diào)用

beforeRouteLeave

????????導(dǎo)航離開該組件的對應(yīng)路由時調(diào)用

路由守衛(wèi)參數(shù)

to

????????即將要進入的目標(biāo)?路由對象($route)

from

????????當(dāng)前導(dǎo)航正要離開的路由對象($route)

next

????????路由確認回調(diào)函數(shù),類似?Promise?中的?resolve?函數(shù),一定要確保調(diào)用?next?函數(shù),但是后續(xù)的導(dǎo)航行為將依賴?next?方法的調(diào)用參數(shù)

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

????????可以在路由配置上直接定義?`beforeEnter`?守衛(wèi)琐凭,相對來說育瓜,應(yīng)用不多

router/index.js

全局守衛(wèi)

????????全局守衛(wèi)是注冊在?router?對象(new?VueRouter({...}))上的

????????????????-?beforeEach

????????????????-?beforeResolve

????????????????-?afterEach

beforeEach

? ? ? ? 注冊在路由對象上青自,當(dāng)一個導(dǎo)航觸發(fā)時株依,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用

router/index.js

beforeResolve

????????在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后被調(diào)用

afterEach

????????導(dǎo)航被確認后調(diào)用

????????因為導(dǎo)航已經(jīng)被確認,所以沒有?`next`

嵌套路由

????????一些比較復(fù)雜的應(yīng)用會有多層嵌套的路由和組件組成

????????在應(yīng)用增加一個用戶個人中心延窜,用戶中心又是由多個頁面組成恋腕,如:

添加路由與子路由

children?屬性

????????一個路由中的?`children`?表示嵌套的子路由


子路由視圖

????????有了子路由以后,還需要在視圖組件中設(shè)置?`router-view`?

重定向redirect

????????有的時候逆瑞,我們會根據(jù)某種需求對用戶請求的頁面進行重新定位

案例

????????現(xiàn)有一小說網(wǎng)站荠藤,提供了?男生頻道?和?女生頻道?的兩個入口,用戶首次進入頁面的時候获高,會出現(xiàn)選擇哈肖,并記住用戶的選擇,以后

????????該用戶進入網(wǎng)站直接根據(jù)記錄的選擇進入對應(yīng)的頻道

組件

路由配置

redirect

別名alias

????????重定向念秧,是從一個路由切換到另外一個路由淤井,而別名是不同的路由顯示同一個頁面,比如:`/user`?是用戶中心的路由摊趾,`/member`?币狠,

????????我們也可以給這個頁面定義另外一個路由,雖然在某些時候砾层,重定向與別名有類似的效果漩绵,但是,別名不存在跳轉(zhuǎn)肛炮,瀏覽器地址欄上

????????顯示的?URL?并不會切換

404


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末止吐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侨糟,更是在濱河造成了極大的恐慌碍扔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粟害,死亡現(xiàn)場離奇詭異蕴忆,居然都是意外死亡颤芬,警方通過查閱死者的電腦和手機悲幅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來站蝠,“玉大人汰具,你說我怎么就攤上這事×饽В” “怎么了留荔?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我聚蝶,道長杰妓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任碘勉,我火速辦了婚禮巷挥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘验靡。我一直安慰自己倍宾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布胜嗓。 她就那樣靜靜地躺著高职,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辞州。 梳的紋絲不亂的頭發(fā)上怔锌,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音变过,去河邊找鬼产禾。 笑死,一個胖子當(dāng)著我的面吹牛牵啦,可吹牛的內(nèi)容都是我干的亚情。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼哈雏,長吁一口氣:“原來是場噩夢啊……” “哼楞件!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起裳瘪,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤土浸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彭羹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄伊,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年派殷,在試婚紗的時候發(fā)現(xiàn)自己被綠了还最。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡毡惜,死狀恐怖拓轻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情经伙,我是刑警寧澤扶叉,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響枣氧,放射性物質(zhì)發(fā)生泄漏溢十。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一达吞、第九天 我趴在偏房一處隱蔽的房頂上張望茶宵。 院中可真熱鬧,春花似錦宗挥、人聲如沸乌庶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞒大。三九已至,卻和暖如春搪桂,著一層夾襖步出監(jiān)牢的瞬間透敌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工踢械, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酗电,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓内列,卻偏偏與公主長得像撵术,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子话瞧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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