关于vue-入口app.vue文件的配置

转至:http://www.hangge.com/blog/cache/detail_2133.html

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

在之前的文章中我介绍了 vue-router 结合  组件从而实现页面缓存的功能。但默认情况下,在发生路由跳转后,我们代码中是不知道这个跳转属于前进还是后退,这样对于一些特殊需求就不好实现了,比如:

实现前进刷新,后退不刷新。

前进、后退分别使用不同的过场动画。

虽然我们可以通过在url 中添加一个 key,或者使用 meta 配置层级的方法来实现区分,但总归不方便。其实使用 vue-navigation 这个第三方组件可以完美解决这个问题。

一、基本介绍

1,什么是 vue-navigation?

(1)vue-navigation 是一个基于 vue 与 vue-router 的第三方导航库。

(2)与 keep-alive 相似,vue-navigation 可以保存页面状态。

(3)比 keep-alive 强的是,vue-navigation 保存状态是可以识别路由的前进后退的。其导航默认行为类似手机 APP 的页面导航(假设 A、B、C 为页面):

A 前进到 B,再前进到 C;

C 返回到 B 时,B 会从缓存中恢复;

B 再次前进到 C,C 会重新生成,不会从缓存中恢复;

C 前进到 A,A 会生成,现在路由中包含 2 个 A 实例。

2,安装方法

进入 vue 项目文件夹后执行如下命令进行安装:

npm i -S vue-navigation

3,配置方法

(1)首先在 main.js 文件中引入并启用导航组件:

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 中添加了一个 key 来区分路由。key 的名称默认为 VNK,我们可以将其修改成其他的。

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

(2)如果项目还用到了 vuex,我们可以使用如下方式启用导航组件,传入 store 后:

vue-navigation 会向 store 注册一个 Module(Module 的默认名称为 navigation)。

同时在页面跳转时会提交 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 实例

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 的默认名称同样是可以更改的。

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

引入 vuex的方法

安装 : npm install vuex --save 

使用: 然后我们在项目的src目录下新建一个目录store,在该目录下新建一个index.js文件,我们用来创建vuex实例,然后在该文件中引入vue和vuex,创建Vuex.Store实例保存到变量store中,最后使用export default导出store:


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

(3)然后在 App.vue 中使用 <navigation> 组件将 router-view 包裹起来即可。

<template>

  <div id="app">

    <navigation>

      <router-view/>

    </navigation>

  </div>

</template>

二、使用样例

1,效果图

项目中共有“步骤1”“步骤2”“步骤3”这个 3 个页面(默认加载步骤1)

当从步骤 2 返回步骤 1 时,步骤 1 之前的内容数据仍然保留。同样从步骤 3 返回步骤 2 时,步骤 2 之前的内容数据仍然保留。

而从步骤 3 跳转到步骤 1 时,步骤 1 会重新生成(不显示之前数据)。同样从步骤 1 前进到步骤 2、步骤 2 前进道步骤 3,这些下一步页面也是重新生成。

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">回到首页</button>

  </div>

</template>


<script>

export default {

  name: 'step2',

  methods: {

    gotoPrevStep() {

      this.$router.go(-1);

    },

    gotoStep1() {

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

    }

  }

}

</script>

三、路由改变的事件响应

    vue-navigation 提供了许多事件监听方法,我们可以在不同的事件响应方法中执行不同的功能操作(比如前进或后退使用不同的动画)

1,功能说明

(1)vue-navigation 支持如下 5 种事件类型的监听:

forward:前进

back:后退

replace:替换

refresh:刷新

reset:重置

(2)而监听方法有 on()、once()、off() 这 3 种,每个方法都有 to、from 这个两个参数(分别代表来源路由、目标路由),to、from 参数内属性如下:

name:路由的名称(包含 key,类型为 string)

route:vue-route 的路由信息对象

2,使用样例

(1)这里我们修改 App.vue 代码,监听常用的事件并输出到控制台。

<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,控制台输出如下:

四、组件方法

1,方法介绍

vue-navigation 提供了如下两个方法可以对路由记录进行操作:

getRoutes():获取路由记录

cleanRoutes():清空路由记录

2,使用说明

(1)在全局环境中使用 Vue.navigation 进行调用:

Vue.navigation.cleanRoutes();

(2)在 Vue 实例中使用 this.$navigation 进行调用:

this.$navigation.cleanRoutes();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335