Vue Router动态路由匹配路由
1 动态匹配路由的基本用法
思考:
<!– 有如下 3 个路由链接 -->
<router-link to="/user/1">User1</router-link>
<router-link to="/user/2">User2</router-link>
<router-link to="/user/3">User3</router-link>
// 定义如下三个对应的路由规则,是否可行???
{ path: '/user/1', component: User }
{ path: '/user/2', component: User }
{ path: '/user/3', component: User }
应用场景:通过动态路由参数的模式进行路由匹配
| var router = new VueRouter({ |
| routes: [ |
| |
| { path: '/user/:id', component: User } |
| ] |
| }) |
| const User = { |
| |
| template: '<div>User {{ $route.params.id }}</div>' |
| } |
| <body> |
| |
| <div id="app"> |
| <router-link to="/user/1">User1</router-link> |
| <router-link to="/user/2">User2</router-link> |
| <router-link to="/user/3">User3</router-link> |
| <router-link to="/register">Register</router-link> |
| |
| |
| <router-view></router-view> |
| </div> |
| |
| <script> |
| const User = { |
| template: '<h1>User 组件 -- 用户id为: {{$route.params.id}}</h1>' |
| } |
| |
| const Register = { |
| template: '<h1>Register 组件</h1>' |
| } |
| |
| |
| const router = new VueRouter({ |
| |
| routes: [ |
| { path: '/', redirect: '/user'}, |
| { path: '/user/:id', component: User }, |
| { path: '/register', component: Register } |
| ] |
| }) |
| |
| |
| const vm = new Vue({ |
| |
| el: '#app', |
| data: {}, |
| |
| |
| router |
| }) |
| </script> |
| </body> |
2 路由组件传递参数
$route与对应路由形成高度耦合,不够灵活,所以可以使用props将组件和路由解耦
2.1 props的值为布尔类型
| const router = new VueRouter({ |
| routes: [ |
| |
| ] |
| }) |
| const User = { |
| props: ['id'], |
| |
| template: '<div>用户ID:{{ id }}</div>' |
| } |
| <body> |
| |
| <div id="app"> |
| <router-link to="/user/1">User1</router-link> |
| <router-link to="/user/2">User2</router-link> |
| <router-link to="/user/3">User3</router-link> |
| <router-link to="/register">Register</router-link> |
| |
| |
| <router-view></router-view> |
| </div> |
| |
| <script> |
| const User = { |
| props: ['id'], |
| template: '<h1>User 组件 -- 用户id为: {{id}}</h1>' |
| } |
| |
| const Register = { |
| template: '<h1>Register 组件</h1>' |
| } |
| |
| |
| const router = new VueRouter({ |
| |
| routes: [ |
| { path: '/', redirect: '/user'}, |
| { path: '/user/:id', component: User, props: true }, |
| { path: '/register', component: Register } |
| ] |
| }) |
| |
| |
| const vm = new Vue({ |
| |
| el: '#app', |
| data: {}, |
| |
| |
| router |
| }) |
| </script> |
| </body> |
2.2 props的值为对象类型
| const router = new VueRouter({ |
| routes: [ |
| |
| { path: '/user/:id', component: User, props: { uname: 'lisi', age: 12 }} |
| ] |
| }) |
| |
| const User = { |
| props: ['uname', 'age'], |
| template: ‘<div>用户信息:{{ uname + '---' + age}}</div>' |
| } |
| |
| <body> |
| |
| <div id="app"> |
| <router-link to="/user/1">User1</router-link> |
| <router-link to="/user/2">User2</router-link> |
| <router-link to="/user/3">User3</router-link> |
| <router-link to="/register">Register</router-link> |
| |
| |
| <router-view></router-view> |
| </div> |
| |
| <script> |
| const User = { |
| props: ['id', 'uname', 'age'], |
| template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>' |
| } |
| |
| const Register = { |
| template: '<h1>Register 组件</h1>' |
| } |
| |
| |
| const router = new VueRouter({ |
| |
| routes: [ |
| { path: '/', redirect: '/user'}, |
| { path: '/user/:id', component: User, props: { uname: 'lisi', age: 20 } }, |
| { path: '/register', component: Register } |
| ] |
| }) |
| |
| |
| const vm = new Vue({ |
| |
| el: '#app', |
| data: {}, |
| |
| |
| router |
| }) |
| </script> |
| </body> |
3 props的值为函数类型
| const router = new VueRouter({ |
| routes: [ |
| |
| { path: '/user/:id', |
| component: User, |
| props: route => ({ uname: 'zs', age: 20, id: route.params.id })} |
| ] |
| }) |
| |
| const User = { |
| props: ['uname', 'age', 'id'], |
| template: ‘<div>用户信息:{{ uname + '---' + age + '---' + id}}</div>' |
| } |
| |
| <body> |
| |
| <div id="app"> |
| <router-link to="/user/1">User1</router-link> |
| <router-link to="/user/2">User2</router-link> |
| <router-link to="/user/3">User3</router-link> |
| <router-link to="/register">Register</router-link> |
| |
| |
| <router-view></router-view> |
| </div> |
| |
| <script> |
| const User = { |
| props: ['id', 'uname', 'age'], |
| template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>' |
| } |
| |
| const Register = { |
| template: '<h1>Register 组件</h1>' |
| } |
| |
| |
| const router = new VueRouter({ |
| |
| routes: [ |
| { path: '/', redirect: '/user' }, |
| { |
| path: '/user/:id', |
| component: User, |
| props: route => ({ uname: 'zs', age: 20, id: route.params.id }) |
| }, |
| { path: '/register', component: Register } |
| ] |
| }) |
| |
| |
| const vm = new Vue({ |
| |
| el: '#app', |
| data: {}, |
| |
| |
| router |
| }) |
| </script> |
| </body> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-04-19 反射:获取Class对象的三种方式