vue组件化路由

news2024/11/15 12:31:33

文章目录

    • vue项目
      • 1.vue组件
      • 2.插槽
      • 3.自定义指令
      • 4.vue路由

vue项目

vue项目中src目录的构成

在这里插入图片描述

  • assets: 存放项目中用到的静态资源文件,例如css,图片资源等
  • components: 存放我们封装的、可复用的组件
  • main.js: 项目的入口文件,整个项目的运行要先执行main.js
  • App.vue: 项目的根组件

vue项目的运行流程

​ 在工程化项目中,vue要做的事情: 通过main.jsApp.vue渲染到index.html的指定区域中。

App.vue:用来编写待渲染的模板结构

在这里插入图片描述

index.html中需要预留一个el区域

在这里插入图片描述

main.js把App.vue渲染到index.html所预留的区域中

在这里插入图片描述

1.vue组件

组件化开发

​ 指的是根据封装的思想,把页面上可复用的UI结构封装为组件,从而方便项目的开发和维护。

vue中的组件化开发

  • vue是一个支持组件化开发的框架
  • vue中规定: 组件的后缀名是.vue

vue组件的三大组成部分

  • template: 组件的模板结构
  • script: 组件的js行为
  • style: 组件的样式

使用组件的三个步骤

1.使用import语法导入需要的组件

2.使用components节点注册组件

3.以标签的形式使用注册好的组件

在这里插入图片描述

  • 通过components注册的是私有组件

1.注册全局组件

​ 某个组件要频繁的使用到,定义为全局组件

main.js->导入需要注册的全局组件->Vue.components('注册名称',组件)

// 导入需要注册的全局组件
import Global from '@/components/Global.vue'
// 注册全局组件
Vue.component('Myglobal', Global)

2.组件的props

props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大的提高组件的复用性。

声明init自定义属性:

在这里插入图片描述

  • default: default定义属性的默认值
  • type: type来定义属性值的类型
  • required: 定义属性是必填项

3.组件之间的样式冲突问题

​ 默认情况下,写在.vue组件中的样式会全局生效,因此很容易产生多个组件之间样式冲突的问题。

解决组件中的样式冲突:

在这里插入图片描述

  • 给当前组件的style添加scoped属性
  • vue在底层生成这个组件的时候,自动为每个dom元素都生成data-v-xxx属性
  • 一个组件中都同用一个data-v-xxx属性

4./deep/的使用

​ 在父组件中要修改子组件的样式,可以用/deep/

在这里插入图片描述

  • 使用/deep/后,子组件dom元素就有了与父组件相同的data-v-xxx属性
  • 当使用第三方组件库的时候,如果有修改第三方组件默认样式的需求,需要用到/deep/

5.组件的生命周期函数

在这里插入图片描述

(1)组件创建阶段

beforeCreate()

  • 组件的props/data/methods尚未被创建,都处于不可用的状态。

created()

  • 组件的props/data/methods已创建好,都处于可用状态
  • 经常在这个阶段,调用methods中的方法,请求服务器数据,并且把请求到的数据转存到data中,供template模板渲染的时候使用

beforeMount()

  • 将要把内存中编译好的html结构渲染到浏览器中

mounted()

  • 已经把内存中的html结构,成功的渲染到浏览器中,此时浏览器中包含有组件的dom结构。
  • 这个阶段中可以第一次操作DOM

(2)组件运行阶段

beforeUpdate()

  • 将要根据变化过后的最新数据,重新渲染组件的模板结构
  • 此时data里的数据是最新的,但UI结构的内容是旧的

updated()

  • 根据最新的数据,完成了dom结构的重新渲染,此时data数据和dom结构同步
  • 此时可以操作最新的dom

(3)组件销毁阶段

beforeDestroy()

  • 将要销毁此组件,此时尚未销毁,组件还处于正常工作状态

destroyed()

  • 组件已销毁,此时组件在浏览器中对应的dom结构已经被完全移除

组件创建阶段和销毁阶段自始至终都是执行一次,而执行阶段可以执行0~n次。

6.组件之间的数据共享

(1)父组件向子组件共享数据

子组件中声明props接收父组件传过来的值:

在这里插入图片描述

  • 需要使用自定义属性

父组件中定义数据,并在new子组件的过程中绑定传值:

在这里插入图片描述

(2)子组件向父组件共享数据

子组件通过$.emit('事件名称',数据)触发自定义事件:

在这里插入图片描述

  • 需要使用自定义事件

父组件绑定自定义事件,通过事件处理函数,接收传过来的值:

在这里插入图片描述

(3)兄弟组件之间的数据共享

创建eventBus.js模块,并向外共享一个Vue实例:

在这里插入图片描述

在数据发送方,通过bus.$emit('事件名称',发送的数据)方法触发自定义事件:

在这里插入图片描述

在数据接收方,通过bus.$on('事件名称',事件处理函数)方法绑定自定义事件:

在这里插入图片描述

  • 需要使用到eventBus

7.ref引用

ref辅助我们在不需要调用domAPI(不依赖JQeury)的情况下,获取DOM元素或组件的引用。

(1)ref引用dom元素

在模板中的元素上,添加ref=""

在这里插入图片描述

通过this.$refs.dom元素.样式方式修改dom元素

在这里插入图片描述

  • ref的属性名不能重复,否则会冲突
  • 每个vue的组件实例上都包含有一个$refs对象,里面存储着对应的DOM元素或组件的引用(默认为空)。

(2)ref引用组件实例

在对应的组件上,添加ref属性

在这里插入图片描述

通过this.$refs.组件实例.data/methods

在这里插入图片描述

  • 这样就能访问到LeftSon组件中的methods或data了

扩展:

this.$nextTick(cb)

​ 等组件的DOM更新完毕后,再执行cb回调函数,从而保证cb回调函数内可以操作到最新的DOM元素。

在这里插入图片描述

  • 使用this.$nextTick(cb)可以延迟cb的调用,直到dom根据最新的数据重新渲染完毕后,才去执行

8.动态组件

​ vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染,<component>相当于组件的占位符

(1)创建动态组件

在这里插入图片描述

  • <component>中定义的动态组件,切换组件时会重新创建销毁

(2)keep-alive组件缓存

<keep-alive>可以把内部的组件进行缓存

在这里插入图片描述

  • 当切换其他组件时,组件缓存。当再次切换回来时,组件激活,并不会重新被创建。

当组件进行缓存时,检查可以看到:

在这里插入图片描述

(3)keep-alive的生命周期函数

<keep-alive>有两个生命周期函数,分别是: activated(),deactivated()。

在这里插入图片描述

  • activated():表示组件被激活(第一次创建组件的时候也会触发)
  • deactivated():表示组件被缓存

(4)keep-alive的include属性&exclude属性

在这里插入图片描述

  • include: 指定需要被缓存的组件(多个组件之间用,号分隔)
  • exclude: 指定不需要被缓存的组件

2.插槽

插槽(slot)是vue为组件的封装者提供的功能,开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。

1.插槽的基本使用

封装的组件中声明一个插槽区域

在这里插入图片描述

使用v-slot指令把内容填充到指定的插槽中

在这里插入图片描述

  • v-slot:可以简写为#

2.具名插槽

​ 插槽带有name名称也叫具名插槽

在这里插入图片描述

3.作用域插槽

​ 封装组件时,预留的插槽中指定了数据项的属性,则称为作用域插槽

在这里插入图片描述

往插槽填充内容时,要使用到数据项,则用插槽名称=来接收

在这里插入图片描述

  • 默认情况下,若预留插槽中没有指定属性,得到的是空对象{}
  • 可以使用对象解构的方式来接收插槽的属性

3.自定义指令

1.私有自定义指令

​ 只在当前组件中生效的指令。

在每个vue组件中,可以在directives节点下,声明私有自定义指令
在这里插入图片描述

  • bind:只能调用一次。即指定第一次绑定到元素时调用,当DOM更新时bind函数不会触发
  • update:在每次DOM更新时调用

简写形式:

在这里插入图片描述

使用自定义指令

在这里插入图片描述

2.全局自定义指令

​ 全局共享的自定义指令,其他组件都能用。

main.js中声明全局自定义指令

Vue.directive('指令名称',function(el,binding){})

在这里插入图片描述

4.vue路由

​ 前端路由就是Hash地址组件之间的对应关系

前端路由的工作方式

1.用户点击了上面的路由链接

2.导致url地址栏的hash值发生了变化

3.前端路由监听到了hash地址的变化

4.前端路由把当前hash地址对应的组件渲染到浏览器中

  • 前端路由底层原理是监听了onhashchange事件,当哈希地址改变时,把当前哈希地址对应的组件渲染到页面中。

1.vue-router的基本使用

vue-router是vue.js官方给出的路由解决方案。它只能使用在vue项目中,能够轻松的管理SPA项目中组件的切换。

官网: https://router.vuejs.org/zh/

(1)安装vue-router

npm i vue-router@3.5.2 -S

(2)创建路由模块

在这里插入图片描述

(3)导入并挂载路由模块

​ main.js中导入并挂载

在这里插入图片描述

(4)声明路由链接和占位符

在这里插入图片描述

(5)定义hash地址与组件之间的对应关系

在这里插入图片描述

2.路由的重定向

​ 通过路由规则的redirect属性,指定一个新的路由地址,就可以设置路由的重定向

在这里插入图片描述

3.嵌套路由

​ 通过路由实现组件的嵌套展示,叫做嵌套路由

在这里插入图片描述

  • 通过children属性声明子路由规则
  • 点击父级链接显示模板内容,模板内容中又有子级路由链接,点击子级路由链接显示子级模板内容。

展示父路由的同时也展示子路由

(1)可以用重定向

在这里插入图片描述

(2)可以用默认子路由

在这里插入图片描述

  • children数组中,某个路由规则的path值为时,则为默认的子路由。

4.动态路由

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

在这里插入图片描述

在这里插入图片描述

  • 在路由规则中使用英文的冒号: 来定义路由的参数项。

拿到参数项匹配的值

(1)传统方式

this.$route.params

在这里插入图片描述

(2)为路由规则开启props传参

props:true

在这里插入图片描述

组件中声明props,拿到动态参数的值

在这里插入图片描述

扩展

​ 在hash地址中,/后面的参数项,是路径参数

在这里插入图片描述

  • 在路由参数对象中,使用this.$route.params来访问路径参数

​ 在hash地址中,?后面的参数项,是查询参数

在这里插入图片描述

  • 在路由对象中,使用this.$route.query来访问查询参数

​ 在this.$route中,path只是路径部分,fullpath是完整的路径。

在这里插入图片描述

5.路由导航

(1)声明式导航

​ 在浏览器中,点击链接实现的导航方式,叫声明式导航,如:网页中点击普通的a链接,vue项目中点击<router-link>都属于声明式导航。

在这里插入图片描述

(2)编程式导航

​ 在浏览器中,调用API方法实现的导航方式,叫编程式导航,如:普通网页中调用location.href跳转到新页面的方式,属于编程式导航。

(3)vue-router中的编程式导航

​ vue-router提供了许多编程式导航的API,如:$router.push(),$router.replace(),$router.go()

在这里插入图片描述

  • this.$router.push('hash地址'): 表示跳转到指定hash地址,并增加一条历史记录

在这里插入图片描述

  • this.$router.replace('hash地址'): 表示跳转到指定hash地址,并替换掉当前的历史记录

在这里插入图片描述

  • this.$router.go(数值n): 表示在浏览历史中前进或后退n页
  • $router.go的简化: $router.forward(),$router.back()

6.导航守卫

​ 导航守卫可以控制路由的访问权限

(1)全局前置守卫

​ 每次发生路由跳转时,都会触发全局前置守卫。因此,在全局前置守卫中,我们可以对每个路由进行访问权限控制。

声明全局前置守卫

在这里插入图片描述

next函数的3种调用方式: next(),next(‘/路径’),next(false)。

在这里插入图片描述

  • next(): 当前用户拥有后台主页的访问权限,直接放行
  • next('/login'): 当前用户没有后台主页的访问权限,强制跳转到登录页面
  • next(false): 当前用户没有后台主页的访问权限,不允许跳转到后台主页,停留在当前页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定时器详解 -- 定时器中断、PWM输出 --stm32

STM32定时器使用 STM32定时器计数模式定时器工作原理基本定时器&#xff1a;TIM6、TIM7示例代码代码讲解 通用定时器&#xff1a;TIM2、TIM3、TIM4、TIM5高级定时器&#xff1a;TIM1、TIM8定时器PWM输出原理通用定时器3控制通道1输出PWM脉冲代码 总结参考资料 STM32定时器 STM…

加密与解密 调试篇 动态调试技术 (三)-OllyDbg 插件 Run/Hit 符号调试 加载程序

目录 插件 这里给出一个命令行插件 Run Trace 运行 Hit Trace 符号调试 符号格式 1.SYM格式 2.COFF格式 3.CodeView格式 4.PDB格式 5.DBG格式 6.MAP文件 创建调试文件 加载程序 1.CreateProcess 2.将OllyDbg附加到一个正在运行的程序上 插件 OllyDbg允许插件 …

1计算机网络体系结构_1.1计算机网络概述

1.1.1计网_概念 概念&#xff1a; 计网是一个 将【分散的、具有独立功能的】计算机系统&#xff0c;通过【通信设备与线路】连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。简言之&#xff0c;计算机网络就是一些 互连的、自治的 计算机系统 的 集合。 …

excel函数采集,截取特殊符号前面/后面数据

截取前面 LEFT(I2,FIND("-",I2)-1) 截取后面 MID(I2,FIND("-",I2)1,99) 房贷利率计算公司&#xff0c;等额本金 (B2-G2*A2)*F2*0.01 Excel常用电子表格公式大全  一、Excel基本公式   1、查找重复内容公式&#xff1a;IF(COUNTIF(A:A,A2)>1,&qu…

国密算法解析

国密算法即国家密码局认定的国产密码算法。 国密算法是商用密码&#xff0c;仅能用于商业用途。国密算法是一套标准&#xff0c;由国家密码局制定的规范&#xff0c;凡是符合的&#xff0c;都可以称之为国密算法。国密算法暂无官方的代码实现&#xff0c;企业可以自己编码实现…

2022年五一杯数学建模A题血管机器人的订购与生物学习解题全过程及论文和程序

2022年五一杯数学建模A题 血管机器人的订购与生物学习 原题再现&#xff1a; 随着微机电系统的发展&#xff0c;人类已经可以加工越来越小的机器。这些机器小到一定程度就可以放进血管开展疾病治疗&#xff0c;这就是血管机器人。血管机器人可以携带药物放入血管里定点治疗与…

信号调制的工作原理

要理解如何进行无线数据传输&#xff0c;我们需要了解&#xff1a; 什么是频率&#xff1f; 信息/数据信号 时间表示 频率表示&#xff0c;为什么它很重要&#xff1f; 滤波器如何工作&#xff1f; FCC通信频段 调制和解调 这些主题可能您在大学专业课上学过&#xff0c…

uboot下的mw写内存和md显示内存命令以及nand命令

配置uboot参数 setenv ipaddr 192.168.0.10;setenv serverip 192.168.0.40;setenv gatewayip 192.168.0.1;setenv netmask 255.255.255.0 setenv bootargs mem512M consolettyAMA0,115200 root/dev/mtdblock2 rootfstypeyaffs2 rw init/init mtdpartshinand:1M(boot),4M(kern…

面试offer收割机,爆肝整理高频软件测试面试题(带答案)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试面试题&am…

excel 给合并的单元格进行序号填充

一、问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在使用excel 的时候&#xff0c;是否遇到过要给合并单元格排序的情况&#xff0c;下拉会显示需要相同的单元格才行&#xff0c;如图&#xff1a; 二、解决方案 目的是给单元格计数&#xff0c;所以使用…

Module not found: Error: Can‘t resolve ‘fs‘ in ‘/root/workspace/

项目发版时 因为webpack5 不会自动引入polyfills 导致报了一系列错&#xff0c; 按照提示做如下配置 externals 官网文档解释的很清楚&#xff0c;就是webpack可以不处理应用的某些依赖库&#xff0c;使用externals配置后&#xff0c;依旧可以在代码中通过CMD、AMD或者wi…

打车/代驾/跑腿小程序源码司机入住uniapp/thinkphp

开发代驾顺风车货运 客户端&#xff1a;Uniapp 开发 司机端&#xff1a;Uniapp 开发 后台&#xff1a;thinkphp5 框架 数据库&#xff1a;MySQL 打车/代驾/跑腿小程序源码司机入住uniapp/thinkphp 为什么用UNIAPP开发&#xff1f; UNIAPP框架简单&#xff0c;学习成本低…

Spring(IOC,DI,事务)属性

Spring&#xff08;IOC&#xff0c;DI&#xff0c;事务&#xff09;属性 IOC 概念 Inverse Of Controll&#xff1a;控制反转&#xff1b;反转了依赖关系的满足方式&#xff0c;由之前的自己创建依赖对象&#xff0c;变为由工厂推送。(变主动为被动&#xff0c;即反转)解决了…

1_5 optical_flow

采用特征点法做VO存在耗时较大的问题&#xff0c;一般耗时情况&#xff1a;如下 (1) 在图像中提取特征点并计算特征描述&#xff0c; 非常耗时 ~10ms ORB&#xff0c;shift耗时更多&#xff1b; (2) 在不同图像中寻找特征匹配&#xff0c; 非常耗时 …

day43|动态规划5-不同0-1背包的问题形态

关键点&#xff1a; 找到前后两种状态的依赖关系 经典0-1背包&#xff1a; 给定一个背包&#xff0c;问装满该背包的最大价值。分割等和子集&#xff1a; 给定一个背包&#xff0c;能不能装满该背包&#xff08;将重量抽象成价值&#xff09;最后一块石头重量&#xff1a; 给一…

如何快速图片压缩指定大小?图片压缩到200k以内的方法

图片压缩到200k以内的介绍 在现代社交媒体和网页设计中&#xff0c;高质量的图片是必不可少的。但是&#xff0c;大型图像文件可能会导致页面加载时间过长&#xff0c;从而影响用户体验。这时就需要使用图片压缩技术来将图片文件大小减小到合理的范围内。其中&#xff0c;将图…

稳健地对时间序列光学卫星图像进行配准教程

一、引言 几何误差会导致连续卫星图像采集之间的错位&#xff0c;进而影响土地监测和变化检测分析。在这篇博客文章中&#xff0c;我们研究了如何稳健地对时间序列光学卫星图像进行配准&#xff0c;以减少这种错位的影响。 在本篇博客的末尾&#xff0c;给出用Python配准大区域…

【TES710D-EXT】基于复旦微的FMQL10S400全国产化ARM核心模块之扩展板

板卡概述 TES710D-EXT是专门针对我司TES710D&#xff08;基于复旦微FMQL10S400的全国产化ARM核心板&#xff09;的测试扩展板。 FMQL10S400是复旦微电子研制的全可编程融合芯片&#xff0c;在单芯片内集成了具有丰富特点的四核处理器&#xff08;PS&#xff09;和可编程逻辑&am…

B/S架构与C/S架构的区别

B/S与C/S区别&#xff1a; 1、c/s架构主要应用于局域网内&#xff0c;而b/s架构主要应用于广域网中&#xff1b; 2、c/s架构一般面向相对固定的用户群&#xff0c;对信息安全的控制能力很强&#xff0c;而b/s架构对安全的控制能力相对弱&#xff1b; 3、B/S架构维护升级比较简单…

考研算法复试刷题第20天:Dijkstra求最短路 【有向图的最短路径问题】

Dijkstra求最短路 我们先来说说这道算法的过程&#xff1a; 和上道题不同的是我们这次是求一个有向图到最终节点的最短距离&#xff0c;所以其策略也有所不同。我们先手动模拟一下过程吧假如有4个点&#xff0c;有他们之间有五条边&#xff0c;那么我们如何来求其1到4的最短路…