vue总结 vue-router篇

感悟:最近呢参加了一些面试,感觉自己基础还是不够好 总结一下

vue-router 篇:

跳转路由的几种方式:
 
  1、声明式: 1) 根据路由路径(/home/sort/detail)跳转 <router-link :to="{path: '/home/sort/detail', query:{id: 'abc'}}">点击查看子页面</router-link>
             2) 根据路由名称(detail)跳转 <router-link :to="{name: 'detail', params:{id: 'abc'}}">点击查看子页面</router-link>
                :to=""  可以实现绑定动态的 路由 和 参数
 
  2、编程式: 1this.$router.push({path: '/home/sort/detail',query:{id: 'abc'}})
             2this.$router.push({name: 'detail',params:{id: 'abc'}})
 
    备注: params 和 query 传参的区别:
            1、params传参时  参数不会出现在url的路径上面, 但是刷新页面时param里面的数据会消失
            2、query传参时   参数出现在url的路径上面, 刷新页面时query里面的数据不变

参数接收:


this.$route.query  this.$route.params 

// 注意:name  必须和 params   path 必须和 query 传参时注意

路由监听:

 watch:{
        $route(to, from){
            console.log(to, from)
        }
    }
    
// 或:

watch: {
  $route: {
    handler: function(val, oldVal){
      console.log(val);
    },
    // 深度观察监听
    deep: true
  }
},

//或:

watch: {
  '$route':'getPath'
},
methods: {
  getPath(){
    console.log(this.$route.path);
  }
}
 //  注意:组件销毁将无法监听 所以说组件在不销毁的前提下只能监听自身   

导航守卫

1.全局前置守卫

	router.beforeEach((to, from, next) => {
    console.log(to, from, next);
    return next(false);
})

// 这里需要注意的是 next 一定要被调用 否则路由不会执行
// next取直: 参数为空时继续走下一步, 参数可以是false 当为false时 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
// next还可以传入新的路由地址 如:任何用在 router-link 的 to prop 或 router.push 中的选项。 {name: '', params:{}}

2.全局解析守卫

说明:你可以用 router.beforeResolve 注册一个全局守卫。这和 router.beforeEach类似,区别是在导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用

3.全局后置钩子

router.afterEach((to, from) =>{
    console.log(to, from)
})

说明:这些钩子不会接受 next 函数也不会改变导航本身

4.路由独享守卫

{
   path: '/',
   component: () => import('../components/index'),
   beforeEnter: (to, from, next) => {
     console.log(to,from);
     next();
   }
},

说明:这些守卫与全局前置守卫的方法参数是一样的。

5.组件内的守卫

export default {
    name: 'home',
    data() {
        return{}
    },
     beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
    },
    beforeRouteUpdate (to, from, next) {
        // 在当前路由改变,但是该组件被复用时调用
        // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
        // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
        // 可以访问组件实例 `this`
    },
    beforeRouteLeave (to, from, next) {
        // 导航离开该组件的对应路由时调用
        // 可以访问组件实例 `this`
    },
    methods:{
        toBack() {
            this.$router.push({path:'/', query: {name: 'Marry'}});
        }
    },
    mounted(){
        console.log('this is  home')
        console.log(this.$route.params);
    }
}

完整的导航解析流程:

导航被触发。
在失活的组件里调用离开守卫。
调用全局的 beforeEach 守卫。
在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
在路由配置里调用 beforeEnter。
解析异步路由组件。
在被激活的组件里调用 beforeRouteEnter。
调用全局的 beforeResolve 守卫 (2.5+)。
导航被确认。
调用全局的 afterEach 钩子。
触发 DOM 更新。
用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。

路由元信息

 path: '/home',
 name: 'home',
 component: () => import('../components/home'),
 props: true,
 meta:{  // 路由元信息
     authId:0 
 }
// 访问可以通过 $route.matched  通过它我们可以做一些权限的判断 基础信息获取

滚动行为:

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。
注意: 这个功能只在支持 history.pushState 的浏览器中可用。

当创建一个 Router 实例,你可以提供一个 scrollBehavior 方法:

const router = new VueRouter({
  routes: [...],
  scrollBehavior (to, from, savedPosition) {
    // return 期望滚动到哪个的位置
  }
})

详细的滚动行为请移步:https://router.vuejs.org/zh/guide/advanced/scroll-behavior.html

路由懒加载

const Foo = () => Promise.resolve({ /* 组件定义对象 */ })

import('./Foo.vue') // 返回 Promise

注意:
如果您使用的是 Babel,你将需要添加 syntax-dynamic-import 插件,才能使 Babel 可以正确地解析语法。
更多详细说明请移步:https://router.vuejs.org/zh/guide/advanced/lazy-loading.html#%E6%8A%8A%E7%BB%84%E4%BB%B6%E6%8C%89%E7%BB%84%E5%88%86%E5%9D%97

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值