vue基础-路由(重要)

前端路由的概念与原理

什么是前端路由

  1. Hash 地址与组件之间的映射关系,前端路由可以将hash地址和组件关联起来
  2. Hash地址就可以先简单的理解为一个url地址
  3. 可以发现,不管是后台路由还是前端路由,都是一种映射关系
    • 后台路由是请求地址(方式)和处理函数之间的映射关系
    • 前端路由是hash地址和组件之间的映射关系

前端路由的工作方式

  1. 用户点击了页面上的路由链接
  2. 导致了 URL 地址栏中的 Hash 值发生了变化
  3. 前端路由监听了到 Hash 地址的变化
  4. 前端路由把当前 Hash 地址对应的组件渲染都浏览器中

实现一个简易版本的路由

基本步骤
  1. 创建三个组件用于测试


  1. 导入并注册这三个组件
<script>
import about from "./about";
import home from "./home";
import movie from "./movie";
export default {
  components: {
    about,
    home,
    movie,
  },
};
</script>
  1. 添加动态组件,用于控制当前组件的显示
<component :is="comName"></component>

  data() {
    return {
      comName: "",
    };
  },
  1. 添加三个超链接,注意设置href为锚链接
<template>
  <div>
    <a href="#/home">home</a> &nbsp;&nbsp;
    <a href="#/movie">movie</a> &nbsp;&nbsp;
    <a href="#/about">about</a> &nbsp;&nbsp;
    <component :is="comName"></component>
  </div>
</template>
  1. 为window添加onhashchange事件,监听hash值的变化
  // 钩子函数 页面一加载就监听
  mounted() {
    window.onhashchange = () => {
      if (location.hash == "#/home") {
        this.comName = "home";
      } else if (location.hash == "#/movie") {
        this.comName = "movie";
      } else if (location.hash == "#/about") {
        this.comName = "about";
      }
    };
  },

效果

vue中路由的基本使用流程

vue-router介绍

  1. Vue Router 是 Vue.js 官方的路由管理器
  2. 它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌,说白了,就是配合vue.js一起来实现单击应用开发的,它主要用来实现项目中的路由管理
  3. 我们需要做的是,将组件 (components) 映射到路由 (routes),然后告诉 Vue Router 在哪里渲染它们
  4. vue-router 目前有 3.x 的版本和 4.x 的版本。其中:
    • vue-router 3.x 只能结合 vue2 进行使用
    • vue-router 4.x 只能结合 vue3 进行使用

路由模块的创建

  1. 在项目中下载安装vue-router
    npm install vue-router
  2. 创建路由模块文件:router.js
  3. 引入
  4. 在模块化工程中明确的安装路由功能
  5. 创建路由对象
  6. 添加具体的路由配置:路由映射组件
  7. 暴露
//  这个文件就是当前项目中的路由管理文件

// 1. 基于工程化-- 模块化
import Vue from 'vue'
import VueRouter from "router"
// 明确的安装路由功能
Vue.use(VueRouter)
// 引入路由映射所需要的组件
import index from '../components/router-demo/index.vue'
import about from '../components/router-demo/about.vue'

// 2.创建路由模块
const router = new VueRouter({
    // 3. 添加路由配置,通过routes可以添加配置,它是一个数组
    routes: [
        // 4. 添加一个一个的具体的路由配置,主要是实现,url地址(路由)的映射关系
        // 它是一个对象,常见的配置:
        // path:路由路径,如果 、login
        // component:所映射的组件对象 ---不是字符串
        {
            path: '/index',
            component: index
        },
        {
            path: '/about',
            component: about
        }
    ]
})

// 5. 暴露
export default router

基本路由功能的实现

  1. 在main.js中引入路由模块
import router from '@/router/managerRouter'
  1. 注入路由
new Vue({
  // 注入路由:让应用可以使用路由功能
  router,
  render: h => h(App),
}).$mount('#app')
  1. 在根组件中添加router-view
<!-- 设置路由映射组件的展示区域 -->
<router-view></router-view>
  1. 使用router-link添加超链接
<!-- 添加超链接 -->
<router-link to="/index">首页</router-link>

延迟加载组件

延迟加载:需要时才加载组件,而不是一开始就全部加载好,将代码块的加截推迟到需要的时候加载,从而使应用程序的初始包变得更小,达到节省性能的目的

// 异步加载 -- 延迟加载
component: () => import('../components/day6/router-demo/index.vue')

动态路由匹配

路由参数的设置和传递

动态路由指的是:把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。

  1. 动态路由参数的设置
    • 使用场景:某种模式匹配到的所有路由,全都映射到同个组件
    • “路由参数”使用冒号 : 标记
        {
            // 设置参数
            path: '/index/:id',
            name: 'index',
            // component: index
            // 异步加载 -- 延迟加载
            component: () => import('../components/day6/router-demo/index.vue')
        },
  1. 动态路由参数的匹配
<router-link to="/index/1"></router-link>

注意:
如果没有传递参数,则路由无法匹配
不用在传递参数的时候添加:了

获取路由参数

    // 通过$route获取路由参数
    // id:就是路由参数设置时的id
    // console.log(this.$route);
    // console.log(this.$route.params.id);
    let id = this.$route.params.id

使用 props 接收路由参数

  1. 为了简化路由参数的获取形式,vue-router 允许在路由规则中开启 props 传参
{
    // 设置参数
    path: '/index/:id',
    name: 'index',
    // component: index
    // 在组件中,以props的形式接收路由规则所匹配的参数
    props: true,
    // 异步加载 -- 延迟加载
    component: () => import('../components/day6/router-demo/index.vue')
},
  1. 在路由所映射的组件中使用props接收路由参数
export default {
  // 接收路由匹配参数
  props: ["id"],
  }

监听路由参数的变化

  1. 当使用动态路由参数时,如果只是参数的变化,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效
  2. 意味着组件的生命周期钩子不会再被调用(mounted不会再触发)
  3. 我们可以watch (监测变化) $route 对象,以监听路由参数的变化
  //   同一个路由参数变化时触发
  watch: {
    $route(to, from) {
      // 对路由变化做出响应
      ...
    },
  },
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,559评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,201评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,553评论 2 7