• 【Vue】路由


           📝个人主页:五敷有你      

     🔥系列专栏:Vue

    ⛺️稳中求进,晒太阳

    目录

    路由

    单页应用程序

            总结:

    VueRouter

    核心步骤:

    组件存放目录的问题

    路由的封装

    声明式导航

    声明式导航 - 导航链接

    声明式导航 - 两个类名

    声明式导航-跳转传参

    查询参数传参

    动态路由传参

    Vue路由的-重定向

    Vue路由-404

    Vue路由-模式设置

    编程式导航 - 基本跳转


    路由

    单页应用程序

    单页面应用:(SPA):所有功能在 一个html页面上 实现

    开发分类

    实现方式

    页面性能

    开发效率

    用户体验

    学习成本

    首屏加载

    SEO

    单页

    一个html

    按需更新

    性能高

    非常好

    多页

    多个html页面

    整页更新

    性能低

    中等

    一般

    中等

    • 单页面应用: 系统网站,内部网站,文档网站,移动端站点
      • 具体实例:网易云
    • 多页面应用: 公司官网,电商类网站
    总结:
    • 单页面应用程序之所以开发效率高,性能高,用户体验好 最大原因就是:页面按需更新
    • 按需更新,首先需要明确: 访问路径和组件的对应关系---路由

    生活中的路由:设备和ip的映射关系

    Vue中的路由: 路径和组件的映射关系

    VueRouter

    作用:修改地址栏路径时,切换显示匹配的组件

    说明:Vue官方的一个路由插件,是一个第三方包

    使用步骤:(写在main.js)

            1. 下载:下载VueRouter 模板到当前工程 版本3.6.5

    1. yarn add vue-router@3.6.5
    2. npm i vue-router@3.6.5

            2. 引入

    import VueRouter from 'vue-router'

             3 .安装注册

    Vue.use(VueRouter)

            4. 创建路由对象

    const router=new VueRouter()

            5.注入,将路由对象注入到newVue实例中,建立关联

    1. new Vue({
    2. render:h=>h(App),
    3. router:router
    4. }).$mount('#app')

    核心步骤:

            1.创建需要的组件(views目录),配置路由规则

    1. import Find from './views/Find.vue'
    2. import Find from './views/Find.vue'
    3. import Find from './views/Find.vue'
    4. const router=new VueRouter({
    5. routes:[
    6. {path:"/find",component:Find},
    7. {path:"/find",component:Find},
    8. {path:"/find",component:Find},
    9. ]
    10. })

            2.配置导航,配置路由出口(路径匹配的组件的位置)

                    确定显示的位置

    1. <div class="footer_warp">
    2. <a href="#/find">发现音乐</a>
    3. <a href="#/my">我的音乐</a>
    4. <a href="#/friend">朋友</a>
    5. </div>
    6. <div>
    7. <router-view></router-view>
    8. </div>

    组件存放目录的问题

    注意:.vue文件 本质无区别

    路由相关的组件,为什么放在views目录呢?

    组件分类

    • 页面组件 - 页面展示 - 配合路由用 -view层
    • 复用组件 - 展示数据 - 常用于复用 -components层

    路由的封装

    问题:所有的路由都堆在main.js中合适么?

    目标:将所有的模块抽离出来

    好处:拆分模块

    封装到router/index.js下

    1. import myMusic from '@/components/myMusic.vue'
    2. import myFriends from '@/components/myFriends.vue'
    3. import findMusic from '@/components/findMusic.vue'
    4. import Vue from 'vue'
    5. import VueRouter from 'vue-router'
    6. Vue.use(VueRouter)
    7. const router=new VueRouter({
    8. routes:[
    9. //router 路由规则
    10. //route 一条路由规则{path:"路径",component:组件名}
    11. {path:"/my",component:myMusic},
    12. {path:"/find",component:findMusic},
    13. {path:"/friend",component:myFriends},
    14. ]
    15. })
    16. <--导出路由-->
    17. export default router;

    之后再在main.js中导入

    import router from './router/index'

    声明式导航

    声明式导航 - 导航链接

    vue-router提供了一个全局组件router-link(取代a标签)

    1. 能跳转:配置to属性指定路径(必须),本质还是a标签,to无需#
    1. <router-link to="find">发现音乐router-link>
    2. <router-link to="friend">我的朋友router-link>
    3. <router-link to="my">我的音乐router-link>
    1. 能高亮:默认就会提高高亮类名,可以直接设置高亮样式
      1. 有.router-link-active
      2. 有。router-link-exact-active
    1. <router-link to="find" class="router-link-exact-active router-link-active">发现音乐router-link>
    2. <router-link to="friend">我的朋友router-link>
    3. <router-link to="my">我的音乐router-link>

    声明式导航 - 两个类名

    router-link自动给当前导航添加了两个高亮类名

    1.router-link-active 模糊匹配(用的多)

                    to="/my" 可以匹配 /my /my/a /my

    2.router-link-exact-active 精确匹配

                    to="/my" 仅可以匹配 /my

     

    声明式导航-跳转传参

    目标:在跳转的路由的时候传参

    1. 查询参数传参
      1. 语法格式如下
        1. to="/to"?参数名=值"
    1. <div class="nav">
    2. <router-link to="find?key=发现音乐">发现音乐router-link>
    3. <router-link to="friend?key=我的朋友">我的朋友router-link>
    4. <router-link to="my?key=我的音乐">我的音乐router-link>
    5. div>

    1. 对应页面组件接受传递过来的值
      1. $route.query.参数名.
    1. <template>
    2. <div class="main">
    3. <h1>{{ $route.query.key }}h1>
    4. <p>朋友的音乐p>
    5. <p>朋友的音乐p>
    6. <p>朋友的音乐p>
    7. <p>朋友的音乐p>
    8. div>
    9. template>
    动态路由传参
    1. 配置动态路由
      1. {path:"/my/:word",component:myMusic},
    1. const router=new VueRouter({
    2. routes:[
    3. {path:"/my/:word",component:myMusic},
    4. {path:"/find/:word",component:findMusic},
    5. {path:"/friend/:word",component:myFriends},
    6. ]
    7. })

           2. 配置导航链接

                to="path/参数值"

    <router-link to="/my/我的音乐">我的音乐router-link>

             3.对应页面组件接受传递过来的值

                    $route.params.参数名

      <h1>{{ $route.params.word }}h1>

    Vue路由的-重定向

    问题:网页打开,url默认时是/路径,未匹配到组件时,会出现空白

    说明:重定向 →匹配path后,强制跳转path路径

    语法:{path:匹配路径,redirect:重定向的路径},

    1. const router=new VueRouter({
    2. routes:[
    3. {path:"/",redirect:"/find/爱你"},
    4. {path:"/my/:words",component:myMusic},
    5. {path:"/find/:words",component:findMusic},
    6. {path:"/friend/:words",component:myFriends},
    7. ]
    8. })

    Vue路由-404

    作用:当路径找不到匹配时,给个提示页面

    位置:配置路由的最后

    语法:path:"*"(任意路径)-前面不匹配就命中最后一个

    1. const router=new VueRouter({
    2. routes:[
    3. {path:"/",redirect:"/find/爱你"},
    4. {path:"/my/:words",component:myMusic},
    5. {path:"/find/:words",component:findMusic},
    6. {path:"/friend/:words",component:myFriends},
    7. {path:"*",component:NotFind},
    8. ]
    9. })

    Vue路由-模式设置

    问题:路由的路径带有#,能否真正切成路径形式

    hash路由(默认) 例如: http://localhost:8080/#/home

    history路由(常用) 例如: http://localhost:8080/home

     在index.js中

    1. const router=new VueRouter({
    2. mode:"history",
    3. routes:[
    4. {path:"/",redirect:"/find/爱你"},
    5. {path:"/my/:words",component:myMusic},
    6. {path:"/find/:words",component:findMusic},
    7. {path:"/friend/:words",component:myFriends},
    8. {path:"*",component:NotFind},
    9. ]
    10. })

    编程式导航 - 基本跳转

    问题:点击按钮怎么跳转

    编程式导航,用js代码跳转

    两种语法:

    1. path 路径跳转
    1. 简单写法:
    2. this.$router.push("/路由路径")
    3. 复杂写法:
    4. this.$router.push({
    5. path:'/路由路径',
    6. })

    query传参

    1. 简写:
    2. this.$router.push('/路径?参数1=值,参数2=值,参数3=值')
    3. 完整写法:
    4. this.$router.push({
    5. path:"/路径",
    6. query:{
    7. 参数名1:"值",
    8. 参数名2:"值"
    9. }
    10. })
    11. 对应取值
    12. <h1>{{ $route.query.key }}h1>

    动态传参

    1. 简写:
    2. this.$router.push("/路径/${this.inpValue}")
    3. 完整写法:
    4. this.$router.push({
    5. path:"路径/关键词"
    6. })
    7. //取值
    8. this.$route.param.words

    name 命名路由跳转(适合path路径长的场景)

    1. {name:'路由名',path:'/path/xxx',component:xxx}
    2. //query传参
    3. this.$router.push({
    4. name:"路由名",
    5. query:{
    6. }
    7. })
    8. //动态路由传参
    9. this.$router.push({
    10. name:"路由名",
    11. param:{
    12. }
    13. })

  • 相关阅读:
    vue computed作用特点及使用场景及示例
    输入框(input)的宽度根据内容自适应
    Java 六边形架构 – BABAL
    学习路之PHPstorm--使用ftp功能连宝塔报错
    分布式系统中如何实现临界资源的互斥访问?
    Discuz 安装全流程 CentOS+Docker+PHP+Nginx+Mariadb
    《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图
    vmware workstation设置固定ip的几种方法
    vulntarget-b靶场详细通关记录
    利尔达蓝牙空调接收器方案助力打造更舒适的公路生活
  • 原文地址:https://blog.csdn.net/m0_62645012/article/details/136378775