• Vue-router 进阶


    1、 路由的元信息

    在定义路由的时候,可以定义 meta 字段

    children: [
         {
             path: 'bar',
             component: Bar,
    
             // a meta field  元信息
             meta: { requiresAuth: true }  这里路由提示需要认证
         }
     ]

    如何使用这个meta呢?

     

    路由中匹配到的路径都被称为路由记录,每个路由记录都会被存在 $route.metched 中

    所以,可以通过访问$route.metched 遍历数组,获得meta值。

    在 路由守卫的参数中也有对应的meta值

    router.beforeEach((to, from, next) => {
    
     if (to.matched.some(record => record.meta.requiresAuth)) {
    
       // 检查登录状态
       // 未登录,就跳到登录页
    
       if (!auth.loggedIn()) {
         next({
           path: '/login',
           query: { redirect: to.fullPath }
         })
       } else {
         next()
       }
     } else {
       next() // 确保一定要调用 next()
     }
    })

     

    2、 基于路由的动画效果

     

    3、 获取数据

     

    一般是两种:

     

    1,在路由跳转后组件渲染时获取数据,可以loading,每个视图可以用自己的loading

    2,可以在 beforeRouteEnter  beforeRouteUpdate 中获取数据,和路由同步或者获取不到数据后不next().

    4、 滚动行为

     

    切换路由路径,对应不同页面,同时vue-router还可以保留滚动的位置信息,但仅限于支持pushState的浏览器。

    scrollBehavior (to, from, savedPosition) {
    
        // 1,返回跳转到的指定的页面的位置
        if (to.hash) {
            return{
                selector:to.hash
            };
        }
        // 2, 返回保留的位置
        if (savedPosition) {
             return savedPosition;
        }
    
        // 3, 返回置顶,也是 default
        return{ x:0, y:0 };
    }

    5、 异步滚动 (2.8.0新增)

    返回一个promise 得出一个预期的位置

    scrollBehavior (to, from, savedPosition) {
    
        return new Promise(resolve, reject) {
            setTimeout( () => {
                 resolve({x: 0, y: 0});
            },  2000);    // 接收 promise 传值
        }
    }

    6、 组件懒加载方法  4 种

    6.1 、es6 方式 2种

    声明高阶函数

    const apply = name => import(`../components/${name}.vue`);

    函数引入组件

    ()=> import(`../components/HelloWorld.vue`);  

    6.2 、commonJS 方式  2种

    直接引用

    resolve => require.ensure([], () => resolve(require('../components/HelloWorld.vue')))

    函数引入

    component(resolve) { require(['../components/' + name + '.vue'], resolve) }
  • 相关阅读:
    每天玩转3分钟 MyBatis-Plus
    每天玩转3分钟 MyBatis-Plus
    每天玩转3分钟 MyBatis-Plus
    git仓库管理
    【SpringCloud之pigx框架学习之路 】2.部署环境
    【SpringCloud之pigx框架学习之路 】1.基础环境安装
    Ubuntu 14.04 安装mysql
    Netflix是什么,与Spring Cloud有什么关系
    现学现用-我的第三个小小小私活
    申请微信小游戏账号
  • 原文地址:https://www.cnblogs.com/the-last/p/11391811.html
Copyright © 2020-2023  润新知