libin1991 / libin_Blog

爬虫-博客大全
https://libin.netlify.com/
124 stars 17 forks source link

浅谈Vue-router的部分高级用法 #608

Open libin1991 opened 6 years ago

libin1991 commented 6 years ago

前言

        大家好久不见,上周没来得及写文章,这周终于有时间发布文章了,还是很开心的,至于这篇文章的内容大家就可以看出来不会有很多,并且针对的是已经有初步了解Vue-router的人,好了进入正题。

正题

        今天要介绍的是路由元信息,滚动行为以及路由懒加载这几个的使用方法

        1.路由元信息

        什么是路由元信息,看看官网的解释,定义路由的时候可以配置 meta 字段可以匹配meta字段,那么我们该如何使用它,一个简单的例子,改变浏览器title的值。下面上代码。

//简单的我就不写了直接上解决方案
import Vue from 'vue'
import Router from 'vue-router'
import Login from '../login/Login'
import Home from '../pages/Home'
export default new Router({
    mode: 'history',
    routes: [
        {path: 'home', name: 'Home', component: Home,meta:{title:"主页"}}
        {path: 'login', name: 'Login', component: Login,meta:{title:"登录"}}
    ]
})
//可以在跳转之前判断跳转的组件的名字并用window.document.title赋值
Router.beforeEach((to,from,next) => {
    window.document.title=to.meta.title
})
复制代码

        上面的是不是看上去很简单呢,但是它并不简单,我只是举了一个比较小的例子罢了。还要看大家怎么活学活用这样才好,但是我强调几点需要注意的

        第一点就是这个beforeEach页面跳转之前调用,好处是比如想要改变title的值不会显得太突兀,可以直接替换。

        第二点afterEach这个不用我说了吧这个是在组件跳转之后调用比较适用于返回页面之前浏览过的区域或者是让页面返回顶部的操作。

        2.滚动行为

        想必各位同学应该知道我要讲些什么了没错就是页面的前进和后退时的滚动事件,怎么实现呢,有两种实现方式,先看代码。

//刚才我说过的方法直接使用afterEach方法去实现组件的scrollTo归零
Router.afterEach((to,from,next) => {
    window.scrollTo(0,0)
})
复制代码

        下面是真正的回滚事件可以看看

//简单的我就不写了直接上解决方案
import Vue from 'vue'
import Router from 'vue-router'
import Login from '../login/Login'
import Home from '../pages/Home'
export default new Router({
    mode: 'history',
    routes: [
        {path: 'home', name: 'Home', component: Home,meta:{title:"主页"}}
        {path: 'login', name: 'Login', component: Login,meta:{title:"登录"}}
    ],
    //有两种小的方式进行回滚
    //{ x: number, y: number }
    //{ selector: string, offset? : { x: number, y: number }}
    //第二种方式仅适用于(offset 只在 2.6.0+ 支持)
    scrollBehavior (to, from, savedPosition) {
    console.log(savedPosition)
    return { x: 0, y: 0 }
    }
})
复制代码

        上面我们介绍了scrollBehavior的回滚方法或者说是scrollBehavior的滚动行为,但是想必大家可能对这种方法还有些不太理解,下面我们看看官网是怎么讲解的,使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。没错这个方法就是scrollBehavior滚动行为。另外需要注意: 这个功能只在支持 history.pushState 的浏览器中可用。更多的使用方法可以去官网去看看。

        3.路由懒加载

        或许不应该叫路由懒加载应该叫按需加载我觉着是更合适的。不解释以后用多了你们就会理解。下面上代码。

//代码很简单看看就知道了,下面只贴部分代码
{path:'homepages',name:'Homepages',component:homepages,resolve}
复制代码

        没错只要使用resolve就能实现按需加载的要求,是不是很简单,但是resolve还有很多其他使用方式建议去官网看看。另外诸如go(),history等方法的使用还是去官网上看看自己写出来理解会更快。

后记

        最终的最终还是希望大家多看看理解了再去使用到项目中,不至于使用之后出现细小的bug之类的就不好了,同样的还是感谢大家观赏我的文章,谢谢。