路由 v-router
前端路由和后端路由的区别
- 后端路由:对于普通网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源
- 前端路由:对于单页面应用程序(SPA)来说,主要是通过URL中的hash值来实现不同页面之间的切换;同时,hash有一个特点:HTTP请求中不包括hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现
- 在单页面应用程序中,这种通过hash改变切换页面的方式,称作前端路由(区别于后端路由)
创建一个路由对象及语法规则(不适用于webpack)
1 | <router-link |
- 通过:
router:routerObj
,将路由对象挂载到vm实例上; router-view:
将符合path的组件展示在页面上,若出现多个view,则会重复展示符合条件的组件;router-link:
router-link 相当于a标签,点击,跳转到指定的hash值;active-class:
控制选中时,对应路径组件的样式类名;
路由传参的两种方式
query
传参 表现形式 :/home?id=10&name=zs
- 路由映射表不用改动;
- 通过
?
传参 - 通过
:to = "{path:'/home',query:{}}"
或者:to = "{name:'',query:{}}"
传参,可以传递组件内的变量 - this.$route.query.xxxx获取传递的参数值
- 使用name,不会把路径写死,可以任意传参
1
2
3
4
5
6
7
8
9
10<router-link to = "/login?id=10&name=zs">登录</router-link>
<router-link :to="{path:'/login',query:{id:123}">登录</router-link>
<router-link :to="{name:'login123',query:{id:123}">登录</router-link>
const routes = [
{path:'/login',
name:'login123',
component:login
}
]
console.log(this.$route.query.id)
params
传参 路径传参 表现形式 :/register/333?id=123
- 使用路径传参,只能使用name来表示要跳转到哪个路径;
- 在路由映射表中添加
/:变量
的形式; :to ="{name:'',params:{变量:''}}"
- this.$route.params.xxxx 获取
1 | <router-link :to="{name:'register123',query:{id:123},params:{qqq:333}}">注册</router-link> |
注意原理:
- 1)当我们通过传参时,vue都会通过设置的path,解析出一个正则regexp,去匹配fullpath
- 2)当fullpath是?传参时,匹配失败,params为空,但是可以通过query获取
- 3)当我们通过设置path占位符时,捕捉到fullpath,可以通过params获取
路由的嵌套
- 使用children属性,实现子路由,同时,子路由的path前面,不要带’/‘,否则以根路径开始请求,这样不方便客户理解URL路径
1
2
3
4
5
6
7
8
9
10
11
12let router = new VueRouter({
routes: [
{
path:'/account',
component:account,
children:[
{path:'login',component:login},
{path:'register',component:register}
]
}
]
})
命名视图的用法
1 | <router-view name = "left"></router-view > |