關(guān)于vue-入口app.vue文件的配置

轉(zhuǎn)至:http://www.hangge.com/blog/cache/detail_2133.html

Vue.js - 路由 vue-router 的使用(vue-navigation插件的使用)

在之前的文章中我介紹了?vue-router?結(jié)合??組件從而實(shí)現(xiàn)頁(yè)面緩存的功能。但默認(rèn)情況下悯许,在發(fā)生路由跳轉(zhuǎn)后构诚,我們代碼中是不知道這個(gè)跳轉(zhuǎn)屬于前進(jìn)還是后退纽匙,這樣對(duì)于一些特殊需求就不好實(shí)現(xiàn)了,比如:

實(shí)現(xiàn)前進(jìn)刷新囚戚,后退不刷新顺少。

前進(jìn)、后退分別使用不同的過場(chǎng)動(dòng)畫澄阳。

雖然我們可以通過在url?中添加一個(gè)?key,或者使用?meta?配置層級(jí)的方法來實(shí)現(xiàn)區(qū)分踏拜,但總歸不方便碎赢。其實(shí)使用?vue-navigation?這個(gè)第三方組件可以完美解決這個(gè)問題。

一速梗、基本介紹

1肮塞,什么是 vue-navigation?

(1)vue-navigation?是一個(gè)基于?vue?與?vue-router?的第三方導(dǎo)航庫(kù)。

(2)與?keep-alive?相似姻锁,vue-navigation?可以保存頁(yè)面狀態(tài)枕赵。

(3)比?keep-alive?強(qiáng)的是,vue-navigation?保存狀態(tài)是可以識(shí)別路由的前進(jìn)后退的位隶。其導(dǎo)航默認(rèn)行為類似手機(jī)?APP?的頁(yè)面導(dǎo)航(假設(shè)?A拷窜、B、C?為頁(yè)面):

A?前進(jìn)到?B涧黄,再前進(jìn)到?C篮昧;

C?返回到?B?時(shí),B?會(huì)從緩存中恢復(fù)笋妥;

B?再次前進(jìn)到?C懊昨,C?會(huì)重新生成,不會(huì)從緩存中恢復(fù)挽鞠;

C?前進(jìn)到?A疚颊,A?會(huì)生成狈孔,現(xiàn)在路由中包含?2?個(gè)?A?實(shí)例信认。

2,安裝方法

進(jìn)入?vue?項(xiàng)目文件夾后執(zhí)行如下命令進(jìn)行安裝:

npm i -S vue-navigation

3均抽,配置方法

(1)首先在?main.js?文件中引入并啟用導(dǎo)航組件:

import Vue from?'vue'

import App from?'./App'

import router from?'./router'

import Navigation from?'vue-navigation'


Vue.use(Navigation, {router})


Vue.config.productionTip =?false


new?Vue({

??el:?'#app',

??router,

??components: { App },

??template:?'<App/>'

})

注意:vue-navigation?在?url?中添加了一個(gè)?key?來區(qū)分路由嫁赏。key?的名稱默認(rèn)為?VNK,我們可以將其修改成其他的油挥。

Vue.use(Navigation, {router,keyName: 'hangge'})

(2)如果項(xiàng)目還用到了?vuex潦蝇,我們可以使用如下方式啟用導(dǎo)航組件款熬,傳入?store?后:

vue-navigation?會(huì)向?store?注冊(cè)一個(gè)?Module(Module?的默認(rèn)名稱為?navigation)。

同時(shí)在頁(yè)面跳轉(zhuǎn)時(shí)會(huì)提交?navigation/FORWARD?或?navigation/BACK?或?navigation/REFRESH攘乒。

main.js中代碼則引入store組件贤牛,如下:

import Vue from?'vue'

import App from?'./App'

import router from?'./router'

import store from?'./store'?// vuex store 實(shí)例

import Navigation from?'vue-navigation'


Vue.use(Navigation, {router, store})


Vue.config.productionTip =?false


new?Vue({

??el:?'#app',

??store,

??router,

??components: { App },

??template:?'<App/>'

})

注意:Module?的默認(rèn)名稱同樣是可以更改的。

Vue.use(Navigation, {router, store, moduleName: 'navigation', keyName: 'VNK'})

引入 vuex的方法

安裝 : npm install vuex --save?

使用: 然后我們?cè)陧?xiàng)目的src目錄下新建一個(gè)目錄store则酝,在該目錄下新建一個(gè)index.js文件殉簸,我們用來創(chuàng)建vuex實(shí)例,然后在該文件中引入vue和vuex沽讹,創(chuàng)建Vuex.Store實(shí)例保存到變量store中般卑,最后使用export default導(dǎo)出store:


store中index.js文件的初始配置

(3)然后在?App.vue?中使用?<navigation>?組件將?router-view?包裹起來即可。

<template>

??<div?id="app">

????<navigation>

??????<router-view/>

????</navigation>

??</div>

</template>

二爽雄、使用樣例

1蝠检,效果圖

項(xiàng)目中共有“步驟1”“步驟2”“步驟3”這個(gè)?3?個(gè)頁(yè)面(默認(rèn)加載步驟1)

當(dāng)從步驟?2?返回步驟?1?時(shí),步驟?1?之前的內(nèi)容數(shù)據(jù)仍然保留挚瘟。同樣從步驟?3?返回步驟?2?時(shí)叹谁,步驟?2?之前的內(nèi)容數(shù)據(jù)仍然保留。

而從步驟?3?跳轉(zhuǎn)到步驟?1?時(shí)乘盖,步驟?1?會(huì)重新生成(不顯示之前數(shù)據(jù))本慕。同樣從步驟?1?前進(jìn)到步驟?2、步驟?2?前進(jìn)道步驟?3侧漓,這些下一步頁(yè)面也是重新生成锅尘。

2,樣例代碼

路由配置(router/index.js)

import Vue from?'vue'

import Router from?'vue-router'

import step1 from?'@/components/step1'

import step2 from?'@/components/step2'

import step3 from?'@/components/step3'


Vue.use(Router)


export?default?new?Router({

??routes: [

????{

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

??????name:?'step1',

??????component: step1

????},

????{

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

??????name:?'step2',

??????component: step2

????},

????{

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

??????name:?'step3',

??????component: step3

????}

??]

})

步驟1(step1.vue)

<template>

??<div>

????<h1>步驟一</h1>

????<input type="text"?name=""?value=""><br><br>

????<button @click="gotoNextStep">下一步</button>

??</div>

</template>


<script>

export?default?{

??name:?'step1',

??methods: {

????gotoNextStep() {

??????this.$router.push('/step2');

????}

??}

}

</script>

步驟2(step2.vue)

<template>

??<div>

????<h1>步驟二</h1>

????<input type="text"?name=""?value=""><br><br>

????<button @click="gotoPrevStep">上一步</button>

????<button @click="gotoNextStep">下一步</button>

??</div>

</template>


<script>

export?default?{

??name:?'step2',

??methods: {

????gotoPrevStep() {

??????this.$router.go(-1);

????},

????gotoNextStep() {

??????this.$router.push('/step3');

????}

??}

}

</script>

步驟3(step3.vue)

<template>

??<div>

????<h1>步驟三</h1>

????<input type="text"?name=""?value=""><br><br>

????<button @click="gotoPrevStep">上一步</button>

????<button @click="gotoStep1">回到首頁(yè)</button>

??</div>

</template>


<script>

export?default?{

??name:?'step2',

??methods: {

????gotoPrevStep() {

??????this.$router.go(-1);

????},

????gotoStep1() {

??????this.$router.push('/');

????}

??}

}

</script>

三布蔗、路由改變的事件響應(yīng)

? ? vue-navigation?提供了許多事件監(jiān)聽方法藤违,我們可以在不同的事件響應(yīng)方法中執(zhí)行不同的功能操作(比如前進(jìn)或后退使用不同的動(dòng)畫)

1,功能說明

(1)vue-navigation?支持如下?5?種事件類型的監(jiān)聽:

forward:前進(jìn)

back:后退

replace:替換

refresh:刷新

reset:重置

(2)而監(jiān)聽方法有?on()纵揍、once()顿乒、off()?這?3?種,每個(gè)方法都有?to泽谨、from?這個(gè)兩個(gè)參數(shù)(分別代表來源路由璧榄、目標(biāo)路由),to吧雹、from?參數(shù)內(nèi)屬性如下:

name:路由的名稱(包含?key骨杂,類型為?string)

route:vue-route?的路由信息對(duì)象

2,使用樣例

(1)這里我們修改?App.vue?代碼雄卷,監(jiān)聽常用的事件并輸出到控制臺(tái)搓蚪。

<template>

??<div id="app">

????<navigation>

??????<router-view/>

????</navigation>

??</div>

</template>


<script>

export?default?{

??name:?'App',

??created() {

??????// bind event

??????this.$navigation.on('forward', (to, from) => {

????????console.log('forward to', to,?'from ', from)

??????})

??????this.$navigation.on('back', (to, from) => {

????????console.log('back to', to,?'from ', from)

??????})

??????this.$navigation.on('replace', (to, from) => {

????????console.log('replace to', to,?'from ', from)

??????})

??????this.$navigation.on('refresh', (to, from) => {

????????console.log('refresh to', to,?'from ', from)

??????})

??????this.$navigation.on('reset', () => {

????????console.log('reset')

??????})

??????// and use [once, off] methods

??????this.$navigation.once('forward', () => {

????????console.log('appear once')

??????})

??????const off = () => {

????????console.log('will not appear')

??????}

??????this.$navigation.on('forward', off)

??????this.$navigation.off('forward', off)

????}

}

</script>

(2)我們從步驟?1?->?步驟?2?->?步驟?3,接著再一步步回退到步驟?1丁鹉,控制臺(tái)輸出如下:

四妒潭、組件方法

1悴能,方法介紹

vue-navigation?提供了如下兩個(gè)方法可以對(duì)路由記錄進(jìn)行操作:

getRoutes():獲取路由記錄

cleanRoutes():清空路由記錄

2,使用說明

(1)在全局環(huán)境中使用?Vue.navigation?進(jìn)行調(diào)用:

Vue.navigation.cleanRoutes();

(2)在?Vue?實(shí)例中使用?this.$navigation?進(jìn)行調(diào)用:

this.$navigation.cleanRoutes();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雳灾,一起剝皮案震驚了整個(gè)濱河市漠酿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谎亩,老刑警劉巖记靡,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異团驱,居然都是意外死亡摸吠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門嚎花,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸痢,“玉大人,你說我怎么就攤上這事紊选√渲梗” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵兵罢,是天一觀的道長(zhǎng)献烦。 經(jīng)常有香客問我,道長(zhǎng)卖词,這世上最難降的妖魔是什么巩那? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮此蜈,結(jié)果婚禮上即横,老公的妹妹穿的比我還像新娘。我一直安慰自己裆赵,他們只是感情好东囚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著战授,像睡著了一般页藻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上植兰,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天份帐,我揣著相機(jī)與錄音,去河邊找鬼钉跷。 笑死弥鹦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爷辙。 我是一名探鬼主播彬坏,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼膝晾!你這毒婦竟也來了栓始?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤血当,失蹤者是張志新(化名)和其女友劉穎幻赚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臊旭,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡落恼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了离熏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佳谦。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滋戳,靈堂內(nèi)的尸體忽然破棺而出钻蔑,到底是詐尸還是另有隱情,我是刑警寧澤奸鸯,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布咪笑,位于F島的核電站,受9級(jí)特大地震影響娄涩,放射性物質(zhì)發(fā)生泄漏窗怒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一蓄拣、第九天 我趴在偏房一處隱蔽的房頂上張望兜粘。 院中可真熱鬧,春花似錦弯蚜、人聲如沸孔轴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽路鹰。三九已至,卻和暖如春收厨,著一層夾襖步出監(jiān)牢的瞬間晋柱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工诵叁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雁竞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像碑诉,于是被迫代替她去往敵國(guó)和親彪腔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354