5、VUE前端路由
路由的基本概念
VueRouter基本使用
官方地址:https://router.vuejs.org/zh/
引入相关库文件
VueRouter依赖于vue,因此需要先引入vue
1
2<script src="../js/vue.js"></script>
<script src="../js/vue-router_3.0.2.js"></script>添加路由链接
1
2<router-link to='/user'>user</router-link>
<router-link to='/register'>register</router-link>router-link
标签会被渲染成a标签,to属性则会被渲染成href属性。添加路由填充位
1
<router-view></router-view>
定义路由组件
1
2
3
4
5
6const User = {
template: '<div>User组件</div>'
}
const Register = {
template: '<div>Register组件</div>'
}配置路由规则并创建路由实例
1
2
3
4
5
6
7
8// 创建路由实例对象
const router = new VueRouter({
// 所有路由规则
routes: [
{ path: '/user', component: User },
{ path: '/register', component: Register },
]
})把路由挂载到Vue根实例中
1
2
3
4let app = new Vue({
el: '#app',
router: router
})
完整版的案例:
1 |
|
重定向
路由规则存在redirect
属性,可以实现重定向。
1 | const router = new VueRouter({ |
嵌套路由
创建父级路由链接和父级路由填充位
子路由链接和子路由填充位
1
2
3
4
5
6
7
8
9
10
11
12
13const Register = {
template: `
<div>
<h1>Register组件</h1>
<!-- 子路由链接 -->
<router-link to='/register/tab1'>tab1</router-link>
<router-link to='/register/tab2'>tab2</router-link>
<!-- 子路由占位符 -->
<router-view></router-view>
</div>
`
}子路由的链接及占位符需要定义在父路由的模板中。
父级路由通过children属性配置子集路由
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21const Tab1 = {
template: '<h3>Tab1子组件</h3>'
}
const Tab2 = {
template: '<h3>Tab2子组件</h3>'
}
// 创建路由实例对象
const router = new VueRouter({
// 所有路由规则
routes: [
{ path: '/', redirect: '/user' },
{ path: '/user', component: User },
{
path: '/register', component: Register, children: [
{ path: '/register/tab1', component: Tab1 },
{ path: '/register/tab2', component: Tab2 },
]
},
]
})children
属性表示子路由,是一个数组,使用方式与routers
属性类似。
路由传递参数
基本用法
动态路由规则使用:
开头。在组件中通过$route.params
获取。
1 | <router-link to='/user/1'>user</router-link> |
1 | const User = { |
组件传参
props为布尔值
开启
props
传参1
2
3
4
5
6const router = new VueRouter({
// 所有路由规则
routes: [
{ path: '/user/:id', component: User, props: true },
]
})props
的值是一个布尔类型的值。接受属性
1
2
3
4const User = {
props: ['id'],
template: '<div>User{{id}}组件</div>'
}
props为对象
传递对象时会导致无法匹配路由时所传递的参数。
开启
props
传参1
2
3
4
5
6const router = new VueRouter({
// 所有路由规则
routes: [
{ path: '/user/:id', component: User, props: { name: '张三' } },
]
})接受属性
1
2
3
4const User = {
props: ['name'],
template: '<div>User{{name}}组件</div>'
}
函数类型
函数类型可以获取路由中传递的值,也可以返回自定义的值。
传递对象时会导致无法匹配路由时所传递的参数。
开启
props
传参1
2
3
4
5
6
7
8
9
10
11const router = new VueRouter({
// 所有路由规则
routes: [
{
path: '/user/:id', component: User, props: router => ({
name: '张三',
id: router.params.id
})
},
]
})接受属性
1
2
3
4const User = {
props: ['id', 'name'],
template: '<div>User{{name}}组件{{id}}</div>'
}
命名路由
即对路由起一个别名,当使用router-link
的to属性时绑定一个对象,通过name
属性表示跳转的路由,params
表示携带的参数。
1 | const router = new VueRouter({ |
1 | <router-link :to='{name:"user",params:{id:"3"}}'>user</router-link> |
编程式导航
通过
this.$router.push
指定跳转的路由1
2
3
4
5
6
7
8
9
10
11
12
13const User = {
props: ['id', 'name'],
template: `
<div>User{{name}}组件{{id}}
<button @click='goPush'>跳转</button>
</div>
`,
methods: {
goPush: function () {
this.$router.push('/register')
}
},
}push
可以传递参数的类型:1
2
3
4
5
6
7
8// 字符串(路径名称)
this.$router.push('/register')
// 对象
this.$router.push({ path: '/register' })
// 命名的路由(传递参数)
this.$router.push({ name: '/user', params: { userId: 123 } })
// 带查询参数,变成/register?uname=lisi
this.router.push({ path: '/register', query: { uname: 'lissi' } })通过
this.$router.go
指定回退或前进的步数1
2
3
4
5
6
7
8
9
10
11
12
13const Register = {
template: `
<div>Register组件
<button @click='go'>跳转</button>
</div>
`,
methods: {
go: function () {
// 正数表示前进的步数,负数表示后退的步数
this.$router.go(-1)
}
},
}
携带参数
如果使用name那么使用params
1
2
3
4this.$router.push({
name: '/goods/edit',
params: { a: 1 }
})如果使用path那么使用query
1
2
3
4this.$router.push({
path: '/goods/edit',
query: { a: 1 }
})
案例:后台管理路由
地址:Demo
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline