SPA 锚点值改变后 不会发起请求,发起ajax请求,局部改变页面数据javascript
前端路由html
npm i vue-router -S
Vue.use(VueRouter);
import VueRouter form './x.js';
var router = new VueRouter();
4:配置路由规则 router.addRoutes([路由对象]);
前端
{path:'锚点值',component:要(填坑)显示的组件}
5:将配置好的路由对象交给Vuevue
<router-view></router-view>
<router-link to="/xxx/x">点我</router-link>
锚点值代码维护不方便,若是须要改变锚点值名称java
{ name:'home',path:'/home',component:Home}
2:在router-link的to属性中描述这个规则react
<router-link :to="{name:'home'}></router-link>"
Vue.prototype.xxx = {add:fn}
查询字符串ajax
:to="{name:'detail',query:{id:hero.id} }"
{name:'detail',path:'/detail',component:Detail}
this.$route.query.id
<a href="/detail?id=1">
path方式vue-router
<a href="/detail/1">
:to="{name:'detail',params:{id:hero.id} }"
{ name:'detail',path:'/detail/:id'}
this.$route.params.id
查询字符串配置参数npm
path方式配置参数编程
总结书写代码注意事项
/a
的别名是/b
,意味着当用户访问/b
时,URL会保持为/b
,可是路由匹配则为/a
,就像用户访问/a
同样。
{ path: '/a', component: A, alias: '/b' }
// 方式一:字符串路径path { path: '/a', redirect: '/b' } // 方式二:name { path: '/a', redirect: {name: 'b'} } // 方式三:动态返回重定向目标 { path: '/a', redirect: to => { // 方法接收 目标路由 做为参数;return 重定向的 字符串路径/路径对象 }}
router-link to="/xxx" 命名路由
下图来自vue-router源码
get:function () {
return 本身的router对象;
}
})
须要根据锚点值的改变,仅仅变化上图中的Profile到Posts组件,便可使用嵌套路由
代码思想
1:router-view的细分
它其实就是一个路由改变的事件回调函数
全局路由守卫
router.beforeEach((to, from,next) => {})
router.afterEach((to, from) => {})
路由独享的守卫
const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) =>{ // ... } } ] })
组件内的守卫
const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 由于当守卫执行前,组件实例还没被建立 // 可是,能够这样用 next(vm => { // 经过 `vm` 访问组件实例-> 将来的组件this vm.msg = '数据在此'; }) }, beforeRouteUpdate (to, from, next) { // 触发条件见下文 // 能够访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 能够访问组件实例 `this` } }
beforeRouteUpdate的触发条件(动态路由参数变化时)
{path:"/xxx/:id"}
<router-link to="/xxx/1"
<router-link to="/xxx/2"
next
next(false)
重定向
next('/xxx') // 或者 next({name:'路由对象的name属性'});
to||from
路由meta元数据 -> meta是对于路由规则是否须要验证权限的配置
{ meta:{ isChecked:true } }
路由钩子 -> 权限控制的函数执行时期
router.beforeEach(function(to,from,next) { // 判断to或from的fullPath便可 } )
this.$router.push({ name:'xxx',query:{id:1},params:{name:'abc'} });
{name:'xxx',path:'/xxx/:name'}
3: 根据历史记录.前进或后退
this.$router.go(-1|1);
咱们须要在路由改变时变化页面,ok!同时咱们但愿加上一些淡入淡出等效果,就能够用上transition内置组件
另外,考虑到缓存问题,就加上keep-alive组件结合使用
所以,你看到是这样的
<transition> <keep-alive> <router-view></router-view> </keep-alive> </transition>