zoukankan      html  css  js  c++  java
  • 【Vue】Re16 Router 第三部分(懒加载、子路由)

    一、配置路由懒加载

    懒加载的原因:

    因为组件不断的增加,项目的路由会越来越多

    打包后的文件越来越大,当超过IO读写的瓶颈时,项目加载就很慢了

    所以需要将路由文件分离,在被调用时进行加载

    分析路由index.js文件:

    import Vue from 'vue';
    import Router from 'vue-router';
    import Home from "../components/Home";
    import About from "../components/About";
    import User from "../components/User";
    
    Vue.use(Router);
    
    const routerList = [
      /* 重定向首页路由配置 */
      {
        path : '', /* 缺省值默认指向 '/' */
        redirect : '/home',
      },
      {
        path : '/home', /* 为什么这里是path不是url? 因为完整的url还包括 项目根url(协议头 + 域名(或者IP地址) + 端口号 + 项目根名称路径(可选))  */
        name : 'home', /* 名字可以不加 */
        component : Home
      },
      {
        path : '/about',
        name : 'about',
        component : About
      },
      {
        path : '/user/:username', /* 动态路径:冒号+字符 */
        name : 'user',
        component : User
      }
    ]
    const router = new Router({
      routes : routerList,
      mode : 'history',
    });
    export default router;

    可以看到如果有多少组件,上面就必须import多少

    那么项目运行读取此文件必然需要读完import内容

    如果import内容太多,将会导致执行效率降低

    懒加载配置方式:

    三种方式

    import Vue from 'vue';
    import Router from 'vue-router';
    
    Vue.use(Router);
    
    /* 方式一 */
    const Home = resolve => {
      require.ensure(
        ['../components/Home.vue'],
        () => resolve(require('../components/Home.vue'))
      )
    }
    /* 方式二 */
    const About = resolve => {
      require(['../components/About.vue'],resolve);
    }
    /* 方式三 */
    const User = () => import('../components/User.vue');
    
    const routerList = [
      /* 重定向首页路由配置 */
      {
        path : '', /* 缺省值默认指向 '/' */
        redirect : '/home',
      },
      {
        path : '/home', /* 为什么这里是path不是url? 因为完整的url还包括 项目根url(协议头 + 域名(或者IP地址) + 端口号 + 项目根名称路径(可选))  */
        name : 'home', /* 名字可以不加 */
        component : Home
      },
      {
        path : '/about',
        name : 'about',
        component : About
      },
      {
        path : '/user/:username', /* 动态路径:冒号+字符 */
        name : 'user',
        component : User
      }
    ]
    const router = new Router({
      routes : routerList,
      mode : 'history',
    });
    export default router;

    二、路由嵌套

    在当前路由下继续跳转访问子内容

    /home
        -> /home/module
            -> /home/module/function1
            -> /home/module/function2
            -> /home/module/function3
    ... ...

    所以我们不难看出这是一个层级关系

    配置方式【router/index.js】:

    import Vue from 'vue';
    import Router from 'vue-router';
    
    
    Vue.use(Router);
    
    /* 方式一 */
    const Home = resolve => {
      require.ensure(
        ['../components/Home.vue'],
        () => resolve(require('../components/Home.vue'))
      )
    }
    /* 方式二 */
    const About = resolve => {
      require(['../components/About.vue'],resolve);
    }
    /* 方式三 */
    const User = () => import('../components/User.vue');
    
    const News = () => import('../components/home/News');
    const Messages = () => import('../components/home/Messages');
    
    const routerList = [
      /* 重定向首页路由配置 */
      {
        path : '', /* 缺省值默认指向 '/' */
        redirect : '/home',
      },
      {
        path : '/home', /* 为什么这里是path不是url? 因为完整的url还包括 项目根url(协议头 + 域名(或者IP地址) + 端口号 + 项目根名称路径(可选))  */
        name : 'home', /* 名字可以不加 */
        component : Home, /* 使用懒加载后component这里高亮显示 */
        children : [ /* 设置子路由 */
          {
            path : 'news', /* 等同于 /home + /news = /home/news 这里不需要再加斜杠了 */
            component : News
          },
          {
            path : 'messages', 
            component : Messages
          }
        ]
      },
      {
        path : '/about',
        name : 'about',
        component : About
      },
      {
        path : '/user/:username', /* 动态路径:冒号+字符 */
        name : 'user',
        component : User
      }
    ]
    const router = new Router({
      routes : routerList,
      mode : 'history',
    });
    export default router;

    对应的目录结构尽量清晰明了

    对应的给首页组件处理:

    注意这里的to属性路由地址一定是写完整的!!!

    <template>
      <div>
        <h3>这是首页Home组件</h3>
        <p>
          首页Home组件的内容 <br>
          <router-link to="/home/news">新闻列表</router-link>
          <router-link to="/home/messages">消息列表</router-link>
        </p>
        <router-view></router-view>
      </div>
    </template>
    
    <script>
    export default {
      name: "Home"
    }
    </script>
    
    <style scoped>
    
    </style>

    同样子组件也可以配置默认路径,实现一打开就展示某一部分的内容

    import Vue from 'vue';
    import Router from 'vue-router';
    
    
    Vue.use(Router);
    
    /* 方式一 */
    const Home = resolve => {
      require.ensure(
        ['../components/Home.vue'],
        () => resolve(require('../components/Home.vue'))
      )
    }
    /* 方式二 */
    const About = resolve => {
      require(['../components/About.vue'],resolve);
    }
    /* 方式三 */
    const User = () => import('../components/User.vue');
    
    const News = () => import('../components/home/News');
    const Messages = () => import('../components/home/Messages');
    
    const routerList = [
      /* 重定向首页路由配置 */
      {
        path : '', /* 缺省值默认指向 '/' */
        redirect : '/home',
      },
      {
        path : '/home', /* 为什么这里是path不是url? 因为完整的url还包括 项目根url(协议头 + 域名(或者IP地址) + 端口号 + 项目根名称路径(可选))  */
        name : 'home', /* 名字可以不加 */
        component : Home, /* 使用懒加载后component这里高亮显示 */
        children : [ /* 设置子路由 */
          {
            path : '', /* 这个缺省默认/home */
            redirect : 'news'
          },
          {
            path : 'news', /* 等同于 /home + /news = /home/news 这里不需要再加斜杠了 */
            component : News
          },
          {
            path : 'messages',
            component : Messages
          }
        ]
      },
      {
        path : '/about',
        name : 'about',
        component : About
      },
      {
        path : '/user/:username', /* 动态路径:冒号+字符 */
        name : 'user',
        component : User
      }
    ]
    const router = new Router({
      routes : routerList,
      mode : 'history',
    });
    export default router;
  • 相关阅读:
    java基础知识复习
    红黑二叉查找树(原理、实现)
    Django admin
    redis+sentinel 安装与配置
    浅谈saltstack
    python3 通过smtplib模块发送邮件
    django 自定义分页模块
    chouti项目
    Django 进阶篇二
    Django 进阶篇
  • 原文地址:https://www.cnblogs.com/mindzone/p/13909668.html
Copyright © 2011-2022 走看看