其他分享
首页 > 其他分享> > vue-router路由详细

vue-router路由详细

作者:互联网

 

  由于Vue在开发时对路由支持的不足,于是官方补充了vue-router插件。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,实际上就是组件的切换。路由就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是我们WebApp的链接路径管理系统。
  有的小伙伴会有疑虑,为什么我们不能像原来一样直接用a标签编写链接呢?因为我们一般用Vue做的都是单页应用,只有一个主页面index.html,所以你写的<a></a>标签是不起作用的,要使用vue-router来进行管理。

一、安装

如果你用vue-cli脚手架来搭建项目,配置过程会选择是否用到路由(详细见vue-cli 脚手架),如果选择y,后面下载依赖会自动下载vue-router。
这里还是说一下安装:npm install vue-router

二、创建组件

如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能,用vue-cli生产了我们的项目结构,src文件目录下会有一个router文件夹,此处就是编写路由组件的地方。在src/router/index.js,这个文件就是路由的核心文件:

  1.    
  2.   import Vue from 'vue' //引入Vue
  3.   import Router from 'vue-router' //引入vue-router
  4.   import Hello from '@/components/Hello' //引入根目录下的Hello.vue组件
  5.    
  6.   Vue.use(Router) //Vue全局使用Router
  7.    
  8.   export default new Router({
  9.   routes: [ //配置路由,这里是个数组
  10.   { //每一个链接都是一个对象
  11.   path: '/', //链接路径
  12.   name: 'Hello', //路由名称,
  13.   component: Hello //对应的组件模板
  14.   },{
  15.   path:'/hi',
  16.   component:Hi,
  17.   children:[ //子路由,嵌套路由 (此处偷个懒,免得单独再列一点)
  18.   {path:'/',component:Hi},
  19.   {path:'hi1',component:Hi1},
  20.   {path:'hi2',component:Hi2},
  21.   ]
  22.   }
  23.   ]
  24.   })
  25.    

三、router-link制作导航

1.router-link 是一个组件,它默认会被渲染成一个带有链接的a标签,通过to属性指定链接地址。
注意:被选中的router-link将自动添加一个class属性值.router-link-active。

<router-link to="/">[text]</router-link>

2.router-view 用于渲染匹配到的组件。
①.可以给router-view组件设置transition过渡(Vue2.0 Transition常见用法全解惑)。

  1.    
  2.   <transition name="fade">
  3.   <router-view ></router-view>
  4.   </transition>
  5.    

css过渡类名:
组件过渡过程中,会有四个CSS类名进行切换,这四个类名与transition的name属性有关,比如name="fade",会有如下四个CSS类名:

从上面四个类名可以看出,fade-enter-active和fade-leave-active在整个进入或离开过程中都有效,所以CSS的transition属性在这两个类下进行设置。

过渡模式mode:

②.还可以配合<keep-alive>使用,keep-alive可以缓存数据,这样不至于重新渲染路由组件的时候,之前那个路由组件的数据被清除了。比如对当前的路由组件a进行了一些DOM操作之后,点击进入另一个路由组件b,再回到路由组件a的时候之前的DOM操作还保存在,如果不加keep-alive再回到路由组件a时,之前的DOM操作就没有了,得重新进行。如果你的应用里有一个购物车组件,就需要用到keep-alive。

  1.   <transition>
  2.   <keep-alive>
  3.   <router-view></router-view>
  4.   </keep-alive>
  5.   </transition>

四、动态路由匹配

我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。
调用router的map方法映射路由,每条路由以key-value的形式存在,key是路径,value是组件。例如:'/home'是一条路由的key,它表示路径;{component: Home}则表示该条路由映射的组件:

  1.   router.map({
  2.   '/home': { component: Home },
  3.   '/about': { component: About }
  4.   })

例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用『动态路径参数』来达到这个效果。

  1.    
  2.   const User = {
  3.   template: '<div>User</div>'
  4.   }
  5.    
  6.   const router = new VueRouter({
  7.   routes: [
  8.   // 动态路径参数 以冒号开头
  9.   { path: '/user/:id', component: User }
  10.   ]
  11.   })
  12.    

例如: /user/foo 和 /user/bar 都将映射到相同的路由。
一个『路径参数』使用冒号 : 标记。当匹配到一个路由时,参数值会被设置到this.$route.params,可以在每个组件内使用。
你可以在一个路由中设置多段『路径参数』,对应的值都会设置到 $route.params 中。例如:

 

五、vue-router参数传递

1.用name传值(不推荐)

 

2.通过<router-link> 标签中的to传参

<router-link :to="{name:‘dxl’,params:{key:value}}">东西里</router-link>

3.用url传参

上面第五点也有提到。 :冒号的形式传递参数
(1).在router路由配置文件里以冒号的形式设置参数

  1.   {
  2.   path:'/params/:newsId/:userName,
  3.   component:Params
  4.   }

(2).组件形式,在src/components目录下建立我们params.vue组件。
我们在页面里输出了url传递的参数。

  1.   <template>
  2.   <div>
  3.   <h2>{{ msg }}</h2>
  4.   <p>新闻ID:{{ $route.params.newsId}}</p>
  5.   <p>用户名:{{ $route.params.userName}}</p>
  6.   </div>
  7.   </template>
  8.   <script>
  9.   export default {
  10.   name: 'params',
  11.   data () {
  12.   return {
  13.   msg: 'params page'
  14.   }
  15.   }
  16.   }
  17.   </script>

(3).<router-view>标签path路径中传值

  1.   <router-link to="/params/888/dxl shuai>params</router-link>
  2.    

(4).正则表达式在URL传值中的应用
希望我们传递的新闻ID只能是数字的形式,这时候我们就需要在传递时有个基本的类型判断,path:'/params/:newsId(\\d+)/:userName'

六.响应路由参数的变化

当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。
复用组件时,想对路由参数的变化作出响应的话:
(1). watch(监测变化) $route 对象:

  1.    
  2.   const User = {
  3.   template: '...',
  4.   watch: {
  5.   '$route' (to, from) {
  6.   // 对路由变化作出响应...
  7.   }
  8.   }
  9.   }
  10.    

(2).beforeRouteUpdate 导航守卫
如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate来响应这个变化 (比如抓取用户信息)。

  1.    
  2.   const User = {
  3.   template: '...',
  4.   beforeRouteUpdate (to, from, next) {
  5.   // react to route changes...
  6.   // don't forget to call next()
  7.   }
  8.   }
  9.    

七、实现不同路由不同页面标题

  1.    
  2.   // 定义路由的时候如下定义,name也可为中文
  3.   const routes = [
  4.   { path: '/goods', component: goods, name: 'goods' },
  5.   { path: '/orders', component: orders, name: 'orders' },
  6.   { path: '/seller', component: seller, name: 'seller' }
  7.   ];
  8.   // 创建路由实例
  9.   const router = new VueRouter({
  10.   routes: routes
  11.   })
  12.   // 关键在这里,设置afterEach钩子函数
  13.   router.afterEach((to, from, next) => {
  14.   document.title = to.name;
  15.   })
  16.    

八、重定向

刚进入应用都是进入到“/”这个路由的,如果想直接进入到“/goods”怎么办,有两种方法。一种是利用重定向,另一种是利用vue-router的导航式编程。
redirect基本重定向:

  1.    
  2.   const routes = [
  3.   { path: '/', redirect: '/goods'}
  4.   ]
  5.   重定向的目标也可以是一个命名的路由。
  6.   const routes = [
  7.   { path: '/', redirect: { name: 'goods' }}
  8.   ]
  9.   重定向时也可以传递参数
  10.   {
  11.   path:'/',
  12.   redirect:'/goods/:newsId(\\d+)/:userName'
  13.   }
  14.    

★.这里不得不提到alias别名的使用。
1.首先我们在路由配置文件里给路径起一个别名,dxl。


http://market.szonline.net/amaz/10285.html
http://market.szonline.net/amaz/10284.html
http://market.szonline.net/amaz/10283.html
http://market.szonline.net/amaz/10282.html
http://market.szonline.net/amaz/10281.html
http://market.szonline.net/amaz/10280.html
http://market.szonline.net/amaz/10273.html
http://market.szonline.net/amaz/10272.html
http://www.72177.com/htm/201909/13/4496442.htm
http://www.72177.com/htm/201909/13/4496441.htm
http://www.72177.com/htm/201909/13/4496440.htm
http://www.72177.com/htm/201909/13/4496439.htm
http://www.72177.com/htm/201909/13/4496438.htm
http://www.72177.com/htm/201909/13/4496437.htm
http://www.72177.com/htm/201909/13/4496436.htm
http://www.72177.com/htm/201909/13/4496434.htm
http://www.72177.com/htm/201909/13/4496432.htm
http://www.72177.com/htm/201909/13/4496431.htm
http://www.72177.com/htm/201909/13/4496430.htm
http://www.72177.com/htm/201909/13/4496429.htm
http://www.72177.com/htm/201909/13/4496428.htm
http://www.72177.com/htm/201909/13/4496427.htm
http://www.72177.com/htm/201909/13/4496426.htm
http://www.72177.com/htm/201909/13/4496425.htm
http://www.72177.com/htm/201909/13/4496424.htm
http://www.72177.com/htm/201909/13/4496423.htm
http://www.72177.com/htm/201909/13/4496419.htm
http://www.72177.com/htm/201909/13/4496417.htm
http://www.72177.com/htm/201909/13/4496416.htm
http://www.72177.com/htm/201909/13/4496415.htm
http://www.72177.com/htm/201909/13/4496414.htm
http://www.72177.com/htm/201909/13/4496413.htm
http://www.72177.com/htm/201909/13/4496412.htm
http://www.72177.com/htm/201909/13/4496411.htm
http://www.72177.com/htm/201909/13/4496410.htm
http://www.72177.com/htm/201909/13/4496409.htm
http://www.72177.com/htm/201909/13/4496408.htm
http://www.72177.com/htm/201909/13/4496406.htm
http://www.72177.com/htm/201909/13/4496405.htm
http://www.72177.com/htm/201909/13/4496404.htm
http://www.72177.com/htm/201909/13/4496403.htm
http://www.72177.com/htm/201909/13/4496402.htm
http://www.72177.com/htm/201909/13/4496401.htm
http://www.72177.com/htm/201909/13/4496400.htm
http://www.72177.com/htm/201909/13/4496399.htm
http://www.72177.com/htm/201909/13/4496398.htm
http://www.72177.com/htm/201909/13/4496396.htm
http://www.72177.com/htm/201909/13/4496394.htm
http://www.72177.com/htm/201909/13/4496393.htm
http://www.72177.com/htm/201909/13/4496392.htm
http://www.72177.com/htm/201909/13/4496391.htm
http://www.72177.com/htm/201909/13/4496390.htm
http://www.72177.com/htm/201909/13/4496317.htm
http://www.72177.com/htm/201909/13/4496314.htm
http://www.72177.com/htm/201909/13/4496309.htm
http://market.szonline.net/amaz/10271.html
http://market.szonline.net/amaz/10270.html
http://market.szonline.net/amaz/10269.html
http://market.szonline.net/amaz/10268.html
http://market.szonline.net/amaz/10267.html
http://market.szonline.net/amaz/10266.html
http://market.szonline.net/amaz/10265.html
http://market.szonline.net/amaz/10264.html
http://market.szonline.net/amaz/10263.html
http://market.szonline.net/amaz/10262.html
http://market.szonline.net/amaz/10261.html
http://market.szonline.net/amaz/10260.html
http://market.szonline.net/amaz/10259.html
http://market.szonline.net/amaz/10258.html
http://market.szonline.net/amaz/10257.html
http://market.szonline.net/amaz/10256.html
http://market.szonline.net/amaz/10255.html
http://market.szonline.net/amaz/10254.html
http://market.szonline.net/amaz/10253.html
http://market.szonline.net/amaz/10252.html
http://market.szonline.net/amaz/10251.html
http://market.szonline.net/amaz/10250.html
http://market.szonline.net/amaz/10249.html
http://market.szonline.net/amaz/10248.html
http://market.szonline.net/amaz/10247.html

标签:13,vue,www.72177,htm,htmhttp,router,com,路由,201909
来源: https://www.cnblogs.com/zjw2004112/p/11520461.html