- vue路由安装与基本使用
- vue嵌套路由
- vue动态路由(路由组件传参)
- vue路由重定向和一些其他的路由相关
- 官方手册:https://router.vuejs.org/zh/
一、vue路由安装与基本使用
在项目根文件夹下执行以下命令安装vue-ruoter:
vue add router
执行命令后会有以下提示:
这个提示是让我们配置router的实现模式(hash或者history),这个模式在后面的路由配置中可以设置,只是这里选择的是默认的模式,如果后面的路由配置中不设置就是用这里选择的模式,y表示选择history模式,n选择hash模式,使用hash模式在后面的url中会多出#/。
安装完成以后可在项目根目录下看到新增了router.js文件和views文件夹。
到这里有必要提一下路由是干嘛的(有计算机网络基础的甚至大神者此地绕路),路由一词是用来描述网络数据传输端到端的网络路径范围进程,简单的说就是将数据从一个端口送到另一个端口的路径。而在vue项目中vue-router(路由)就是帮助vue应用找到资源并加载到页面的路径,并且不会触发页面整体刷新重载,而是实现局部刷新。
这里有两个重要的点,在编写代码时遇到url和src不需要添加完整的资源路径,而是通过vue-router来配置路径;其二是不刷新页面,其核心实现是通过hash值或者HTML5的History interface特性来实现。
关于vue-router的实现原理可以参考这篇博客:https://segmentfault.com/a/1190000014822765
关于HTML5的History可以参考这篇博客:https://www.cnblogs.com/roucheng/p/html5api.html
起步示例:
1 //组件模板结构 2 <a href="/">home</a> 3 <a href="/about">about</a> 4 <router-view></router-view> 5 6 //入口js文件 7 import Router from 'vue-router' //导入路由插件 8 import Home from './views/Home' //导入子组件 9 import About from './views/About' //导入子组件 10 11 Vue.use(Router) 12 13 const myRouter = new Router({ //创建路由实例 14 routes:[ 15 { 16 path: '/', 17 component:Home 18 }, 19 { 20 path: '/about', 21 component:About 22 } 23 ], 24 mode: 'history' //配置路由模式,配置history后url上不会多出#/ 25 }) 26 27 new Vue({ 28 router: myRouter, //在vue示例中引入路由实例 29 render: h => h(App) 30 }).$mount('#app')
<a>标签的href属性的路径指向路由实例的path属性;
路由实例中的component属性指示路由path指向的组件;
结构文本中的<router-view>标签标识通过路由配置的连接获取的组件的加载位置(a标签href获取的路由实例配置的path指向的组件在这个标签的位置上显示);
vue实例中router指示配置的路由实例;
注:在上面的示例中虽然实现了vue路由的应用,但是使用的是<a>标签来实现的跳转,这样的实现会导致再加载组件的时候会刷新整个页面,所以再组件模板中需要使用vue提供的自定义标签<router-link>来代替<a>标签实现导航,才能真正的实现vue路由局部更新的效果,所以示例中的模板结构需要修改成:
1 <router-link to="/">home</router-link> 2 <router-link to="/about">about</router-link> 3 <router-view></router-view>
1.使用data数据绑定:
1 <router-link :to="homeLink">home</router-link> 2 3 //在组件内些绑定数据 4 <script> 5 export default { 6 data(){ 7 return { 8 homeLink: '/' 9 } 10 } 11 } 12 </script>
2.通过vue实例的router实例的名称绑定:
1 //:to属性JSON数据会根据模板所在组件绑定的vue实例中的router中的name进行匹配 2 <router-link :to="{name:'about'}">about</router-link> 3 //在router实例中给每个路由申明name属性 4 const myRouter = new Router({ 5 routes:[ 6 { 7 path: '/', 8 name:'home', 9 component:Home 10 }, 11 { 12 path: '/about', 13 name: 'about', 14 component:About 15 } 16 ], 17 mode:'history' 18 })
将router实例从入口js文件中分离出来作为独立模块,然后在入口js文件中引入模块,再在vue实例上绑定这个引入的路由模块:
1 --主入口组件中的模板与数据 2 <template> 3 <div > 4 <router-link :to="homeLink">home</router-link> 5 <router-link :to="{name:'about'}">about</router-link> 6 <router-view></router-view> 7 </div> 8 </template> 9 10 <script> 11 export default { 12 data(){ 13 return { 14 homeLink: '/' 15 } 16 } 17 } 18 </script> 19 20 --主入口js文件 21 import router from './router' //主入口js文件中引入路由模块 22 new Vue({ 23 router:router, //绑定引入的路由模块这里单独写一个‘router’同等与‘router:router’ 24 render: h => h(App) 25 }).$mount('#app') 26 27 --router模块 28 import Vue from 'vue' 29 import Router from 'vue-router' 30 import Home from './views/Home.vue' 31 import About from './views/About' 32 33 Vue.use(Router) 34 35 export default new Router({ 36 routes:[ 37 { 38 path: '/', 39 name:'home', 40 component:Home 41 }, 42 { 43 path: '/about', 44 name: 'about', 45 component:About 46 } 47 ], 48 mode:'history' 49 })