vue-router2.0學(xué)習(xí)筆記

Vue.js的一大特色就是構(gòu)建單頁面應(yīng)用十分方便,既然要方便構(gòu)建單頁面應(yīng)用那么自然少不了路由剃袍,vue-router就是vue官方提供的一個路由框架善绎∏總體來說,vue-router設(shè)計得簡單好用禀酱,下面就來聊聊我實際用到過的一些方法炬守,文章沒有提到的可以去查看官方文檔。vue-router的安裝這里就不提了剂跟,相信會來看這篇博客同學(xué)减途,這些基本能力都是有的。

先上例子

<!-- html部分曹洽,省略head -->
<div id="app">
    <div class="content">
        <router-link to="/goods">商品</router-link>
        <router-link to="/ratings">評論</router-link>
        <router-link to="/seller">商家</router-link>
    </div>
    <router-view></router-view>
</div>
<script src="path-to-vue"></script>
<script src="path-to-vue-router"></script>
// 首先定義或者引入路由的組件
// 方法一:直接定義路由組件
const goods = { template: '<p>goods</p>' };
const ratings = { template: '<p>ratings</p>' };
const seller = { template: '<p>seller</p>' };
// 方法二:import引入路由組件
import goods from 'components/goods/goods';
import ratings from 'components/ratings/ratings';
import seller from 'components/seller/seller';
// 然后定義路由(routes)鳍置,components還可以是Vue.extend()創(chuàng)建的
const routes = [
  { path: '/goods', component: goods },
  { path: '/ratings', component: ratings },
  { path: '/seller', component: seller }
];
// 接著創(chuàng)建路由實例
const router = new VueRouter({
  // ES6縮寫語法,相當(dāng)于routes:routes
  routes  
});
// 最后創(chuàng)建vue實例并掛載
const app = new Vue({
  el: '#app',
  router
});
// 或者
const app = new Vue({
  router
}).$mount('#app')

到這里就可以用vue-router輕松搭建一個單頁面應(yīng)用了送淆。我一般都是使用模塊化編程的形式税产,用.vue單文件,不知道在模塊化編程里怎么加載vue-router的可以參考我的某個項目源碼偷崩。

router-link和router-view

看了上面的例子辟拷,一定對router-link和router-view很感興趣。

router-link

從上面例子中的書寫形式就可以看出阐斜,router-link是一個組件衫冻,它默認會被渲染成一個帶有鏈接的a標(biāo)簽,通過to屬性指定鏈接地址智听。
注意:被選中的router-link將自動添加一個class屬性值.router-link-active羽杰。

router-link屬性配置

to

這是一個必須設(shè)置的屬性,否則路由無法生效到推。它表示路由的鏈接考赛,可以是一個字符串也可以是一個描述目標(biāo)位置的對象。

<router-link to="goods"></router-link>
<router-link to="{path='goods'}"></router-link>

replace

一個布爾類型莉测,默認為false颜骤。如果replace設(shè)置為true,那么導(dǎo)航不會留下history記錄捣卤,點擊瀏覽器回退按鈕不會再回到這個路由忍抽。

<router-link to="goods" replace></router-link>

tag

router-link默認渲染成a標(biāo)簽,也有方法讓它渲染成其他標(biāo)簽董朝,tag屬性就用來設(shè)置router-link渲染成什么標(biāo)簽的鸠项。

<!-- 渲染成li標(biāo)簽 -->
<router-link to="goods" tag="li"></router-link>

active-class

上面說了被選中的router-link將自動添加一個class屬性值.router-link-active,這個屬性就是來修改這個class值的子姜。

router-view

這個組件十分關(guān)鍵祟绊,它就是用來渲染匹配到的路由的。
可以給router-view組件設(shè)置transition過渡,具體用法見Vue2.0 Transition常見用法全解惑牧抽。
還可以配合<keep-alive>使用嘉熊,keep-alive可以緩存數(shù)據(jù),這樣不至于重新渲染路由組件的時候扬舒,之前那個路由組件的數(shù)據(jù)被清除了阐肤。比如對當(dāng)前的路由組件a進行了一些DOM操作之后,點擊進入另一個路由組件b讲坎,再回到路由組件a的時候之前的DOM操作還保存在孕惜,如果不加keep-alive再回到路由組件a時,之前的DOM操作就沒有了衣赶,得重新進行诊赊。如果你的應(yīng)用里有一個購物車組件厚满,就需要用到keep-alive府瞄。

<transition>
  <keep-alive>
    <router-view></router-view>
  </keep-alive>
</transition>

一些小需求怎么實現(xiàn)

不同路由不同頁面標(biāo)題

多頁面應(yīng)用我們可以給每一個頁面都設(shè)置一個不同的標(biāo)題,但是如果是單頁面應(yīng)用的路由呢碘箍?其實也是可以實現(xiàn)的遵馆,實現(xiàn)的方法不止一種,我之前用的是結(jié)合命名路由和導(dǎo)航鉤子函數(shù)的方法丰榴。如下:

// 定義路由的時候如下定義货邓,name也可為中文
const routes = [
  { path: '/goods', component: goods, name: 'goods' },
  { path: '/ratings', component: ratings, name: 'ratings' },
  { path: '/seller', component: seller, name: 'seller' }
];
// 創(chuàng)建路由實例
const router = new VueRouter({
  routes: routes
})
// 關(guān)鍵在這里,設(shè)置afterEach鉤子函數(shù)
router.afterEach((to, from, next) => {
  document.title = to.name;
})

命名路由

既然用到了命名路由四濒,這里就提一下吧换况。命名路由就是用一個名稱來標(biāo)識一個路由,在定義路由的時候設(shè)置一個name屬性即可盗蟆。在router-link中也可以用路由的名字來鏈接到一個路由戈二。

<router-link :to="{ name: 'seller'}">seller</router-link>

導(dǎo)航鉤子

這個我還沒怎么用過,它主要是用來攔截導(dǎo)航的喳资,想使用的參考官方文檔吧觉吭。

怎么剛進入應(yīng)用就渲染某個路由組件

剛進入應(yīng)用都是進入到“/”這個路由的,如果想直接進入到“/goods”怎么辦仆邓,這里提供兩種方法鲜滩。一種是利用重定向,另一種是利用vue-router的導(dǎo)航式編程节值。

重定向

const routes = [
  { path: '/', redirect: '/goods'}
]

是不是很簡單呢徙硅?重定向的目標(biāo)也可以是一個命名的路由。

const routes = [
  { path: '/', redirect: { name: 'goods' }}
]

導(dǎo)航式編程

利用vue-router的導(dǎo)航式編程的router.push方法也可以實現(xiàn)上面的需求搞疗。

// 在創(chuàng)建vue實例并掛載后調(diào)用
router.push('/goods')

router.push方法就是用來動態(tài)導(dǎo)航到不同的鏈接的嗓蘑。它會向history棧添加一個新的記錄,點擊<router-link :to="...">等同于調(diào)用router.push(...)。

vue-router中還有router.replace方法和router.go方法脐往,概念及用法可參考https://router.vuejs.org/zh-cn/essentials/navigation.html休吠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市业簿,隨后出現(xiàn)的幾起案子瘤礁,更是在濱河造成了極大的恐慌,老刑警劉巖梅尤,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柜思,死亡現(xiàn)場離奇詭異,居然都是意外死亡巷燥,警方通過查閱死者的電腦和手機赡盘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缰揪,“玉大人陨享,你說我怎么就攤上這事《巯伲” “怎么了抛姑?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艳狐。 經(jīng)常有香客問我定硝,道長,這世上最難降的妖魔是什么毫目? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任蔬啡,我火速辦了婚禮,結(jié)果婚禮上镀虐,老公的妹妹穿的比我還像新娘箱蟆。我一直安慰自己,他們只是感情好粉私,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布顽腾。 她就那樣靜靜地躺著,像睡著了一般诺核。 火紅的嫁衣襯著肌膚如雪抄肖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天窖杀,我揣著相機與錄音漓摩,去河邊找鬼。 笑死入客,一個胖子當(dāng)著我的面吹牛管毙,可吹牛的內(nèi)容都是我干的腿椎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼夭咬,長吁一口氣:“原來是場噩夢啊……” “哼啃炸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卓舵,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤南用,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掏湾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裹虫,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年融击,在試婚紗的時候發(fā)現(xiàn)自己被綠了筑公。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡尊浪,死狀恐怖匣屡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情际长,我是刑警寧澤耸采,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布兴泥,位于F島的核電站工育,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搓彻。R本人自食惡果不足惜如绸,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旭贬。 院中可真熱鬧怔接,春花似錦、人聲如沸稀轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奋刽。三九已至瓦侮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佣谐,已是汗流浹背肚吏。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狭魂,地道東北人罚攀。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓党觅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斋泄。 傳聞我的和親對象是個殘疾皇子杯瞻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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