前端路由
根据不同的事件来显示不同的页面内容,即事件与事件处理函数之间的对应关系
前端路由是基于hash值的变化进行实现的
- vue router
简单使用
<div id="app"> <router-link to="/user">user</router-link> <router-link to="/register">register</router-link> <!-- 组件显示占位符 --> <router-view></router-view></div>
// 两个组件let user = { template: '<div>user</div>'};let register = { template: '<div>register</div>'};// 定义路由组件映射规则let router = new VueRouter({ routes: [ { path: '/user', component: user }, { path: '/register', component: register } ]})let vm = new Vue({ el: '#app', // 将路由挂载到vue实例 router})
路由重定向
{ path:"/",redirect:"/user"}
嵌套路由
let User = { template: `<div> user <router-link to="/user/add">user add</router-link> <router-link to="/user/delete">user delete</router-link> <router-view></router-view> </div>`};let UserAdd = { template: `<div>this is user add page</div>`};let UserDelete = { template: `<div>this is user delete page</div>`};
{ path: '/user', component: User, children: [ { path: '/user/add', component: UserAdd }, { path: '/user/delete', component: UserDelete }, ]}
动态路由
<router-link to="/register/1">register1</router-link><router-link to="/register/2">register2</router-link>
{ path: '/register/:id', component: register }
- 获取路径传递的参数
<div>register id:{{$route.params.id}}</div>
- 使用props获取路径参数
let register = { props:['id'], template: '<div>register id:{{id}}</div>'};
// 如果props设置为true,route.params将会被设置为组件属性{ path: '/register/:id', component: register,props:true }// 可以将props设置为对象,那么就直接将对象的数据传递给组件进行使用{ path: '/register/:id', component: register,props:{name:'cxk',age:18} }// props设置为函数形式,该函数能访问router.params{ path: "/user/:id", component: User,props:(route)=>{ return {username:"jack",pwd:123,id:route.params.id}}
命名路由
<router-link :to="{name:'user'}">user</router-link>
{ name:'user', path: '/user', ...}
编程式导航
- 声明式导航:通过点击链接的方式实现的导航
- 编程式导航:使用js控制导航跳转
this.$router.push('/register/1');this.$router.go(-1); // 后退