14.Vue路由参数传递以及重定向

1.使用场景

  我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。此时我们就需要传递参数了;

2.使用流程

  • 修改父组件,绑定的子组件路由名称以及传递的参数
  • 修改路由配置文件子组件的路径中添加参数,以及修改名称
  • 修改子组件<template>内容用于展示

3.路由参数传递的两种方式

注:不要在<template>中直接添加获得参数,需要在外层加标签包含起来

1.占位符:

修改父组件Main.vue

  • name:路由中配置的子组件名称
  • params:需要传递给子组件的参数
 1 <template>
 2   <div>
 3     <el-container>
 4       <el-aside width="200px">
 5         <el-menu :default-openeds="[‘1‘]">
 6
 7           <el-submenu index="1">
 8             <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template>
 9             <el-menu-item-group>
10
11               <el-menu-item index="1-1">
12                 <router-link
13                   :to="{name:‘UserProfile‘,params:{userId:1,userName:‘wzh‘}}">
14                   个人信息
15                 </router-link>
16               </el-menu-item>
17
18               <el-menu-item index="1-2">
19                 <router-link to="/user/list">用户列表</router-link>
20               </el-menu-item>
21
22             </el-menu-item-group>
23           </el-submenu>
24
25           <el-submenu index="2">
26             <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template>
27             <el-menu-item-group>
28               <el-menu-item index="2-1">分类管理</el-menu-item>
29               <el-menu-item index="2-2">内容列表</el-menu-item>
30             </el-menu-item-group>
31           </el-submenu>
32
33         </el-menu>
34       </el-aside>
35
36       <el-container>
37         <el-header style="text-align: right; font-size: 12px">
38           <el-dropdown>
39             <i class="el-icon-setting" style="margin-right: 15px"></i>
40             <el-dropdown-menu slot="dropdown">
41               <el-dropdown-item>个人信息</el-dropdown-item>
42               <el-dropdown-item>退出登录</el-dropdown-item>
43             </el-dropdown-menu>
44           </el-dropdown>
45         </el-header>
46
47         <el-main>
48           <router-view />
49         </el-main>
50       </el-container>
51     </el-container>
52   </div>
53 </template>
54
55 <script>
56   export default {
57     name: "Main"
58   }
59 </script>
60
61 <style scoped lang="scss">
62   .el-header {
63     background-color: #B3C0D1;
64     color: #333;
65     line-height: 60px;
66   }
67
68   .el-aside {
69     color: #333;
70   }
71 </style>

修改路由配置文件index.js

  • path:子组件的地址,参数就在最后追加 /:xxxx
  • name:子组件名称
  • component:真实导入的子组件
 1 import Vue from ‘vue‘
 2 import Router from ‘vue-router‘
 3
 4 import Login from "../views/Login"
 5 import Main from ‘../views/Main‘
 6
 7
 8 import UserProfile from "../views/user/Profile"
 9 import UserList from ‘../views/user/List‘
10
11 Vue.use(Router);
12
13 export default new Router({
14   routes: [
15     {
16       // 登录页
17       path: ‘/login‘,
18       name: ‘Login‘,
19       component: Login
20     },
21     {
22       // 首页
23       path: ‘/main‘,
24       name: ‘Main‘,
25       component: Main,
26       // 配置嵌套路由
27       children: [
28         {
29           path: ‘/user/profile/:userId/:userName‘,
30           name: ‘UserProfile‘,
31           component: UserProfile
32         },
33         {
34           path: ‘/user/list‘,
35           component: UserList
36         }
37       ]
38     }
39   ]
40 });

修改子组件Profile.vue显示

{{$route.params.userId}} :用于获取路由对象中的参数

 1 <template>
 2   <div>
 3     <div>个人信息</div>
 4     编号:{{$route.params.userId}}
 5     <br>
 6     姓名:{{$route.params.userName}}
 7   </div>
 8
 9 </template>
10
11 <script>
12     export default {
13         name: "UserProfile"
14     }
15 </script>
16
17 <style scoped>
18
19 </style>

展示:

2.使用props的方式

修改Main.vue

 1 <template>
 2   <div>
 3     <el-container>
 4       <el-aside width="200px">
 5         <el-menu :default-openeds="[‘1‘]">
 6
 7           <el-submenu index="1">
 8             <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template>
 9             <el-menu-item-group>
10
11               <el-menu-item index="1-1">
12                 <router-link
13                   :to="{name:‘UserProfile‘,params:{userId:1,userName:‘wzh‘}}">
14                   个人信息
15                 </router-link>
16               </el-menu-item>
17
18               <el-menu-item index="1-2">
19                 <router-link :to="{name:‘UserList‘,params:{user1:‘小红‘,user2:‘小明‘}}">用户列表</router-link>
20               </el-menu-item>
21
22             </el-menu-item-group>
23           </el-submenu>
24
25           <el-submenu index="2">
26             <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template>
27             <el-menu-item-group>
28               <el-menu-item index="2-1">分类管理</el-menu-item>
29               <el-menu-item index="2-2">内容列表</el-menu-item>
30             </el-menu-item-group>
31           </el-submenu>
32
33         </el-menu>
34       </el-aside>
35
36       <el-container>
37         <el-header style="text-align: right; font-size: 12px">
38           <el-dropdown>
39             <i class="el-icon-setting" style="margin-right: 15px"></i>
40             <el-dropdown-menu slot="dropdown">
41               <el-dropdown-item>个人信息</el-dropdown-item>
42               <el-dropdown-item>退出登录</el-dropdown-item>
43             </el-dropdown-menu>
44           </el-dropdown>
45         </el-header>
46
47         <el-main>
48           <router-view />
49         </el-main>
50       </el-container>
51     </el-container>
52   </div>
53 </template>
54
55 <script>
56   export default {
57     name: "Main"
58   }
59 </script>
60
61 <style scoped lang="scss">
62   .el-header {
63     background-color: #B3C0D1;
64     color: #333;
65     line-height: 60px;
66   }
67
68   .el-aside {
69     color: #333;
70   }
71 </style>

修改index.js

 1 import Vue from ‘vue‘
 2 import Router from ‘vue-router‘
 3
 4 import Login from "../views/Login"
 5 import Main from ‘../views/Main‘
 6
 7
 8 import UserProfile from "../views/user/Profile"
 9 import UserList from ‘../views/user/List‘
10
11 Vue.use(Router);
12
13 export default new Router({
14   routes: [
15     {
16       // 登录页
17       path: ‘/login‘,
18       name: ‘Login‘,
19       component: Login
20     },
21     {
22       // 首页
23       path: ‘/main‘,
24       name: ‘Main‘,
25       component: Main,
26       // 配置嵌套路由
27       children: [
28         {
29           path: ‘/user/profile/:userId/:userName‘,
30           name: ‘UserProfile‘,
31           component: UserProfile
32         },
33         {
34           path: ‘/user/list/:user1/:user2‘,
35           name:‘UserList‘,
36           component: UserList,
37           props: true
38         }
39       ]
40     }
41   ]
42 });

修改子组件List.vue

 1 <template>
 2   <div>
 3     <div>用户列表</div>
 4     用户1:{{user1}}<br>
 5     用户2:{{user2}}
 6   </div>
 7
 8 </template>
 9
10 <script>
11   export default {
12     props:
13       [‘user1‘,‘user2‘],
14     name:
15       "UserList"
16   }
17 </script>
18
19 <style scoped>
20
21 </style>

展示:

4.重定向

  • 修改路由配置
  • 修改组件

修改路由index.js

 1 import Vue from ‘vue‘
 2 import Router from ‘vue-router‘
 3
 4 import Login from "../views/Login"
 5 import Main from ‘../views/Main‘
 6
 7
 8 import UserProfile from "../views/user/Profile"
 9 import UserList from ‘../views/user/List‘
10
11 Vue.use(Router);
12
13 export default new Router({
14   routes: [
15     {
16       // 登录页
17       path: ‘/login‘,
18       name: ‘Login‘,
19       component: Login
20     },
21     {
22       // 首页
23       path: ‘/main‘,
24       name: ‘Main‘,
25       component: Main,
26       // 配置嵌套路由
27       children: [
28         {
29           path: ‘/user/profile/:userId/:userName‘,
30           name: ‘UserProfile‘,
31           component: UserProfile
32         },
33         {
34           path: ‘/user/list/:user1/:user2‘,
35           name:‘UserList‘,
36           component: UserList,
37           props: true
38         },
39         {
40           path: ‘/goHome‘,
41           redirect: ‘/main‘
42         }
43       ]
44     }
45   ]
46 });

修改组件Main.vue

 1 <template>
 2   <div>
 3     <el-container>
 4       <el-aside width="200px">
 5         <el-menu :default-openeds="[‘1‘]">
 6
 7           <el-submenu index="1">
 8             <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template>
 9             <el-menu-item-group>
10
11               <el-menu-item index="1-1">
12                 <router-link
13                   :to="{name:‘UserProfile‘,params:{userId:1,userName:‘wzh‘}}">
14                   个人信息
15                 </router-link>
16               </el-menu-item>
17
18               <el-menu-item index="1-2">
19                 <router-link :to="{name:‘UserList‘,params:{user1:‘小红‘,user2:‘小明‘}}">用户列表</router-link>
20               </el-menu-item>
21
22               <el-menu-item index="1-3">
23                 <router-link to="/goHome">回到首页</router-link>
24               </el-menu-item>
25
26             </el-menu-item-group>
27           </el-submenu>
28
29           <el-submenu index="2">
30             <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template>
31             <el-menu-item-group>
32               <el-menu-item index="2-1">分类管理</el-menu-item>
33               <el-menu-item index="2-2">内容列表</el-menu-item>
34             </el-menu-item-group>
35           </el-submenu>
36
37         </el-menu>
38       </el-aside>
39
40       <el-container>
41         <el-header style="text-align: right; font-size: 12px">
42           <el-dropdown>
43             <i class="el-icon-setting" style="margin-right: 15px"></i>
44             <el-dropdown-menu slot="dropdown">
45               <el-dropdown-item>个人信息</el-dropdown-item>
46               <el-dropdown-item>退出登录</el-dropdown-item>
47             </el-dropdown-menu>
48           </el-dropdown>
49         </el-header>
50
51         <el-main>
52           <router-view />
53         </el-main>
54       </el-container>
55     </el-container>
56   </div>
57 </template>
58
59 <script>
60   export default {
61     name: "Main"
62   }
63 </script>
64
65 <style scoped lang="scss">
66   .el-header {
67     background-color: #B3C0D1;
68     color: #333;
69     line-height: 60px;
70   }
71
72   .el-aside {
73     color: #333;
74   }
75 </style>

原文地址:https://www.cnblogs.com/zhihaospace/p/12083722.html

时间: 2024-08-26 05:35:45

14.Vue路由参数传递以及重定向的相关文章

14.vue路由&amp;脚手架

一.vue路由:https://router.vuejs.org/zh/ 1.定义 let router = new VueRouter({ mode:"history/hash", base:"基本路径" 加一些前缀 必须在history模式下有效 linkActiveClass:"active", 范围选择 linkExactActiveClass:"exact", 精确选择 routes:[ {path,componen

(转)一个vue路由参数传递的注意点

首先我的路由的定义 { path: '/b', name: 'B', component: resolve => require(['../pages/B.vue'], resolve) } 我从A组件跳转到B组件,并通过路由信息对象传递一些参数 this.$router.push({ path: '/b', params: { paramA: 'a' }, query:{ paramB: 'b' } }) 在B组件中获取参数 this.$route.query.paramB //b this.

vue路由-基本使用、重定向、动画、传参

1.什么是路由? url中的hash:https://blog.csdn.net/qq_41219391/article/details/84307129 2.vue路由 1.安装路由: 1.直接下载vue-router.js文件 2.用包管理工具npm 下载并管理        2.使用路由---路由时如何工作的 1.路由最基本的使用 2.路由重定向的使用---redirect 3.设置选中的路由样式的方式(2种) 第一种:直接修改router提供的那个设置选中的类的样式----.router

vue路由的两种模式,hash与history的区别

1.直观区别: hash模式url带#号,history模式不带#号. 2.深层区别: hash模式url里面永远带着#号,我们在开发当中默认使用这个模式. 如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传 功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的, 咱们把这个页面分享到第三方的app里,有的app里面url是不允许带有#号的,所以要将#号去除那么就要使用hist

Vue - 路由传递参数

Vue 2.0  路由传递参数 Vue 路由传递参数 有两种方式: 一.用name传递参数 两步完成用name传值并显示在模板里: 在路由文件src/router/index.js里配置name属性. 1 2 3 4 5 6 7 routes: [ { path: '/', name: 'Hello', component: Hello } ] 模板里(src/App.vue)用$router.name的形势接收,比如直接在模板中显示: 1 <p>{{ $route.name}}</p&

Vue.js—组件快速入门以及Vue路由实例应用

上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js的组件,组件其实就是页面组成的一部分,它是一个具有独立的逻辑和功能或页面,组件可以扩展 HTML 元素,封装可重用的代码.组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树,如下图: 接下来我们就仔细讲讲组件的使用吧. 1 全局组件 以下就是我们注册

Vue路由学习心得

GoodBoy and GoodGirl~进来了就看完点个赞再离开,写了这么多也不容易的~ 一.介绍  1.概念:路由其实就是指向的意思,当我们点击home按钮时,页面中就要显示home的内容,点击login按钮时,页面就显示login的内容,也可以说是一种映射,所有在页面上有两个部分,一个是点击部分,一个是显示部分. 2.路由中有三个基本的概念,route,routes,router. 1.route:它是一个路由,是一个单数,点击Home按钮->Home内容 2.routes:它是一组路由,

Vue路由传递参数详细说明

前言:最近我跟同事在做一个BI系统,采用前后端分离.整个系统包括数据分析系统.运营支持.系统设置等多个子系统.数据分析系统其实就是做各种数据报表.数据统计.实时数据的系统,这里面其实整个页面就是一个模板,最上面是filter.第二级是统计图.最下面是table数据.所以在数据分析子系统中,只要配置一个路由就可以匹配所有页面,在系统中,我把这个为公用路由.至于公用路由权限如何鉴定其实很简单:获取到用户权限列表后,渲染出所有的权限菜单,但注意每次跳转时一定要进行权限校验,具体原因自行思考.说着有点跑

Vue路由及路由守卫

1. Vue路由的添加 vue cli3添加vue-router通过命令vue  add  router export default new Router({ mode: 'history', routes: [ { path: '/', component: Main }, { path: '/login', component: Login } ] }) // app.vue <div id="app"> <router-view></router-