Vue第六章 路由系统、路由流程、路由配置、懒加载和非懒加载的差异、嵌套路由、编程式跳转、路由参数

目录

路由系统

路由流程

 路由配置

懒加载和非懒加载的差异

嵌套路由

编程式跳转

路由参数

每日一句


路由系统

  1. 多页项目的制作: 一个大型网站需要由多个页面组成
  2. 做法分两种:
    1. 传统方案: 每个网页是一个`html`文件, 通过超链接的href 来实现页面跳转
      1. 特点: 先清空之前的页面, 然后显示新的页面 -- 页面有闪烁的感觉
    2. 新方案: Ajax  局部切换
      1. 特点: 不需要清空整个页面, 只需要把局部内容删除 换成新的即可
      2. 新方案的专业名词: `SPA` - Single Page Application  单个页面应用
      3. 整个网站只有一个 html 页面,  利用局部内容切换来实现多页效果
      4. 这套方案依赖一款框架: Vue Router :https://router.vuejs.org/zh/
  3. 路由占位符: 在实际显示时,会切换成对应的组件
  4.  自定义组件分两种:
    1. 组成页面的一部分, 目的是复用: 按钮;标签;超链接;存储在 components 中
    2. 组成页面的一部分, 目的是整体切换: 路由系统切换的页面存储在 views 中

路由流程

  1. 首先书写组件存放的占位符
  2. Vue会自动检测路径的值,通过路径前往router/index.js配置文件中寻找对应的组件
  3. 通过路径找到对应的组件,将组件替换掉占位符

 路由配置

  1. 非懒加载: 先import 再使用
    1. import NewsPage from '../views/NewsPage.vue'
    2. path: 路径; 必须 / 开头
    3. component: 组件;  代表 路径对应的组件
  2. 懒加载 : 利用箭头函数引入, 临时调用函数时再引入
    1. 未使用前 不引入; 使用时 临时引入

懒加载和非懒加载的差异

  1. 路由配置文件中有两种配置方式
  2. 把`非常用`页面做成懒加载的 -- 首次加载时不加载, 使用时临时加载
  3. 把`常用`的页面做成非懒加载的 -- 首次加载时直接加载, 后续可以直接使用 提高体验
  4. 一种为非懒加载先引入后配置
    1. import Vue from "vue";
      import VueRouter from "vue-router";
      import HomeView from "../views/HomeView.vue";
      
      Vue.use(VueRouter);
      
      const routes = [
        {
          path: "/",
          name: "home",
          component: HomeView,
          //下面会讲到嵌套路由,这里先混个眼熟
          children: [
            {
              path: "/home/index",
              name: "routeName",
              meta: {
                keepAlive: true,
              },
              component: () => import("../views/Home.vue"),
            },
            {
              path: "/home/me",
              name: "routeName",
              component: () => import("../views/Me.vue"),
            },
          ],
        },
      ]
  5. 另一种为懒加载直接配置
    1. import Vue from "vue";
      import VueRouter from "vue-router";
      
      Vue.use(VueRouter);
      
      const routes = [
        {
          path: "/login",
          name: "routeName",
          component: () => import("../views/Login.vue"),
          },
        {
          path: "/BinPage",
          name: "routeName",
          component: () => import("../views/BinPage.vue"),
          },
        {
          path: "/AboutView",
          name: "routeName",
          component: () => import("../views/AboutView.vue"),
          },
      ]
      
      
  6. 懒加载与非懒加载的差异

嵌套路由

  1. 嵌套路由可以通过二级路由(多级路由)的方式动态修改页面的局部内容。这种页面中需要动态修改的内容由路由来控制。
  2. 实现步骤:
    1. 先准备好3个组件:`Container.vue   Table.vue    Form.vue`。
    2. 在`router/index.js`中配置`Component`组件的子路由。 
    3. 在`el-main`里,添加占位符。`<router-view/>`。
  3. import Vue from "vue";
    import VueRouter from "vue-router";
    import HomeView from "../views/HomeView.vue";
    
    Vue.use(VueRouter);
    
    const routes = [
      {
        path: "/",
        name: "home",
        component: HomeView,
        children: [
          {
            path: "/home/index",
            name: "routeName",
            meta: {
              keepAlive: true,
            },
            component: () => import("../views/Home.vue"),
          },
          {
            path: "/home/me",
            name: "routeName",
            component: () => import("../views/Me.vue"),
          },
        ],
      },
    ]

编程式跳转

  1. 页面跳转方式分两种: 标签式 和 编程式
  2. 标签式
    1. <router-link to="/">首页</router-link>
    2. to: 是router-link的必备属性, 不写会爆红
    3. 自带激活样式

      - 模糊: `router-link-active`
      - 精确: `router-link-exact-active

    4. <!-- 占位符: 路由切换的核心 --> <router-view />

    5. <router-link to="/about">关于</router-link>
  3. 编程式
    1. 通过方法配置跳转 this.$router.push('/about')
    2. <button @click="goto('/news')">新闻</button>
    3. <button @click="goto('/login')">登录</button>
  4. 路由对象在 router/index.js 中初始化 并 导出,在 main.js 中被 引入 和 填写到 vue 对象里
  5.   console.log(this.$router) //从vue中获取 路由对象
  6.  push: 用于在路径中推入新的路径
  7. 报错: 如果重复跳转,则会抛出错误
    1.  跳转前先判断: 当前路径 和 要跳转到的路径是否相同
    2. 如果相同, 就不跳转
    3.  if (this.$router.currentRoute.path == path) return
  8. 当前路由信息读取: this.$router.currentRoute 太长了
    1. 作者提供了简化的属性 $route, 可以快速读取
    2. if (this.$route.path == path) return  相当于 $route(){return this.$router.currentRoute}

路由参数

  1. 路由传参 类似于 get的传参
    1.  格式: 路径?参数=值&参数=值...
    2. <router-link to="/about?name=xxx&age=22&phone=13688778888">关于xxx</router-link>
      
      <router-link to="/about?name=xxx&age=18&phone=15788779999">关于xxx</router-link>
  2. 传递的参数保存在query属性里
    1. $route.query.name
    2. $route.query.age

每日一句

        盛年不重来,一日难再晨。

        "美好的青春年华过去了就不会再来,一天不可能有两个早晨,要珍惜时光啊!"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张的俊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值