Vue.js:使用Vue-Router 2实现路由功能介绍


Posted in Javascript onFebruary 22, 2017

注意:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能。

推荐使用npm安装。

npm install vue-router

一、使用路由

在main.js中,需要明确安装路由功能:

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
Vue.use(VueRouter)
//1.定义组件,这里使用从其他文件import进来
import index from './components/index.vue'
import hello from './components/hello.vue'
//2.定义路由
const routes = [
{ path: '/index', component: index },
{ path: '/hello', component: hello },
]
//3. 创建 router 实例,然后传 `routes` 配置
const router = new VueRouter({
 routes
})
//4. 创建和挂载根实例。通过 router 配置参数注入路由,从而让整个应用都有路由功能
const app = new Vue({
  router,
 render: h => h(App)
}).$mount('#app')

经过上面的配置之后呢,路由匹配到的组件将会渲染到App.vue里的<router-view></router-view>

那么这个App.vue里应该这样写:

<template>
 <div id="app">
      <router-view></router-view>
 </div>
</template>

index.html里呢要这样写:

<body>
<div id="app"></div>
</body>

这样就会把渲染出来的页面挂载到这个id为app的div里了。

二、重定向  redirect

const routes = [
{ path: '/', redirect: '/index'},   // 这样进/ 就会跳转到/index
{ path: '/index', component: index }
]

三、嵌套路由

const routes = [
{ path: '/index', component: index,
children: [
{ path: 'info', component: info}
] }
]

通过/index/info就可以访问到info组件了

四、懒加载

const routes = [
{ path: '/index', component: resolve => require(['./index.vue'], resolve) },
{ path: '/hello', component: resolve => require(['./hello.vue'], resolve) },
]

通过懒加载就不会一次性把所有组件都加载进来,而是当你访问到那个组件的时候才会加载那一个。对于组件比较多的应用会提高首次加载速度。

五、<router-link>

在vue-router 1中,使用的是<a v-link="{path:'/index'}"></a>

在vue-router 2中,使用了<router-link></router-link>替换1版本中的a标签

<!-- 字符串 -->
<router-link to="home">Home</router-link>
<!-- 渲染结果 -->
<a href="home" rel="external nofollow" >Home</a>

<!-- 使用 v-bind 的 JS 表达式 -->
<router-link v-bind:to="'home'">Home</router-link>

<!-- 不写 v-bind 也可以,就像绑定别的属性一样 -->
<router-link :to="'home'">Home</router-link>

<!-- 同上 -->
<router-link :to="{ path: 'home' }">Home</router-link>

<!-- 命名的路由 -->
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>

<!-- 带查询参数,下面的结果为 /register?plan=private -->
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>

六、路由信息对象

1.$route.path

字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"。

2.$route.params

一个 key/value 对象,包含了 动态片段 和 全匹配片段,如果没有路由参数,就是一个空对象。

3.$route.query

一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。

4.$route.hash

当前路由的 hash 值 (不带 #) ,如果没有 hash 值,则为空字符串。

5.$route.fullPath

完成解析后的 URL,包含查询参数和 hash 的完整路径。

6.$route.matched

一个数组,包含当前路由的所有嵌套路径片段的 路由记录 。路由记录就是 routes 配置数组中的对象副本(还有在 children 数组)。

综合上述,一个包含重定向、嵌套路由、懒加载的main.js如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'
Vue.use(VueRouter)
const router = new VueRouter({
 routes:[
  { path: '/', redirect: '/index' },
  { path: '/index', component: resolve => require(['./components/index.vue'], resolve),
children:[
     { path: 'info', component: resolve => require(['./components/info.vue'], resolve) }
    ]
  },
  { path: '/hello', component: resolve => require(['./components/hello.vue'], resolve) },
 ]
})
const app = new Vue({
 router,
 render: h => h(App)
}).$mount('#app')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript setTimeout和setInterval 的区别
Dec 08 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
详述JavaScript实现继承的几种方式(推荐)
Mar 22 Javascript
无法获取隐藏元素宽度和高度的解决方案
Mar 07 Javascript
AngularJS实现的回到顶部指令功能实例
May 17 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
May 09 Javascript
svg动画之动态描边效果
Feb 22 #Javascript
jQuery实现的简单拖动层示例
Feb 22 #Javascript
Bootstrap 3 进度条的实现
Feb 22 #Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 #Javascript
canvas 绘制圆形时钟
Feb 22 #Javascript
jquery实现数字输入框
Feb 22 #Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 #Javascript
You might like
Snoopy类使用小例子
2008/04/15 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python中的ctime()方法使用教程
2015/05/22 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
PHP面试题及答案二
2015/05/23 面试题
纬创Java面试题笔试题
2014/10/02 面试题
个人教师自我评价范文
2013/12/02 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
人事文员岗位职责
2014/02/16 职场文书
教师一岗双责责任书
2014/04/16 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS