Vue知识总结-下

VUE-组件间通信

组件的自定义事件
  • 概述:是一种组件间通信的方式,适用于:子组件===>父组件
  • 使用场景:A是父组件,B是子组件,B给A传递数据,那么需要在A组件中绑定自定义事件(事件的回调也在A中)
  • 使用步骤
    • 绑定自定义事件:
      • 第一种方式:在父组件中子组件<DemoComponent @testDemo="test/> 或者 <DemoComponent v-on:testDemo="test/>
      • 第二种方式:在父组件中子组件<DemoComponent ref="test/>,然后在mounted(){this.$refs.demo.$on("testDemo",this.回调函数)}
      • 注意:若想让自定义事件只触发一次,可以试用once修饰符或$once方法
    • 触发自定义事件:在子组件中调用this.$emit('testDemo',数据)
    • 解绑自定义事件:在父组件调用this.$off('testDemo')
  • 注意
    • 在组件上也可以绑定原生DOM事件,需要使用native修饰符
    • 通过this.$refs.xxx.$on("testDemo",回调函数)绑定自定义事件时,回调函数要么配置在methods中,要么用箭头函数,否则this指向会出现问题!
全局事件总线(较为常用)

  • 概述:也是一种组件间通信的方式,适用于任意组件间的通信
  • 使用步骤
    • 安装全局事件总线
      • 一般是在创建Vue中的beforeCreate(){Vue.prototype.$bus = this //即在vm上增加bus总线}
    • 使用全局事件总线
      • 接收数据:比如A组件想要接收数据,则在A组件中给$bus绑定自定义事件,且事件的回调也在A组件,如:mounted(){this.$bus.$on('xxx事件名',this.回调函数)}
      • 提供数据:this.$bus.$emit('xxx事件名',数据)
    • 注意:在beforeDestroy钩子中,使用$off去解绑当前组件所用到的事件
消息订阅与发布
  • 概述:也是一种组件间通信的方式,适用于任意组件间的通信
  • 使用步骤
    • 安装pubsub库:npm i pubsub-js
    • 引入pubsub库:import pubsub from 'pubsub-js'
    • 接收数据:比如A组件想要接收数据,则在A组件中订阅消息,订阅的回调也在A组件中
      •  如:mounted(){ this.pid = pubsub.subscribe('xxx事件名',this.回调函数)} //订阅消息
    • 提供数据:在对应提供数据的组件中发布消息
      • 如:pubsub.publish('xxx事件名',数据)
  • 注意:在beforeDestroy钩子中,调用pubsub.unsubscribe(pid)取消订阅
VUE-vuex

  • vuex专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式管理(即读/写),是一种组件间通信方式且适用于任意组件间通信
  • 使用场景:多个组件需要共享数据时使用
    • 多个组件依赖于同一状态(数据)
    • 来自不同组件的行为需要变更同一状态/数据
使用步骤
  • 通常首先在store文件夹下创建js文件
    • js文件初始化数据: 包括配置action、mutations、state、getters等方法
  • 在main.js创建new Vue时配置store配置项
  • 组件中读取共享数据:$store.state.xxx
  • 组件中修改vuex数据:$store.dispatch('action中的方法名',data)或者$store.commit('mutations中的方法名',data)
  • 注意:
    • getters配置项:当state中的数据需要经过加工后再使用时,可以使用getters加工,组件读取getters: $store.getters.data
    • 当不涉及网络请求或其他业务逻辑,组件可以越过actions,既不用通过dispatch->commit,而是直接编写commit
四个map方法
mappState方法:用于方便我们映射state中的数据为计算属性
computed:{
	...mapState(test:'test',demo:'demo')//对象写法
	...mapState(['test','demo'])//数组写法
}
mapGetters方法:用于方便我们映射getters中的数据为计算属性
computed:{
	...mapGetters(test:'test',demo:'demo')//对象写法
	...mapGetters(['test','demo'])//数组写法
}
mapActions方法:用于方便我们生成actions对话的方法,即$store.dispatch(xxx)函数
methods:{
	...mapActions(test:'test',demo:'demo')//对象写法
	...mapActions(['test','demo'])//数组写法
}
mapMutations方法:用于方便我们生成mapMutations对话的方法,即$store.commit(xxx)函数
methods:{
	...mapMutations(test:'test',demo:'demo')//对象写法
	...mapMutations(['test','demo'])//数组写法
}
模块化+命名空间
  • 让代码更加容易维护,多种数据分类更加明确
  • js文件模块化+命名空间示例
    const test1 = {
    	namespaced:true,//开启命名空间
    	state:{test:2},
    	actions:{...},
    	mutations:{...},
    	getters:{test(state){...}}
    }
    const test2 = {
    	namespaced:true,//开启命名空间
    	state:{x:1},
    	actions:{...},
    	mutations:{...},
    	getters:{test(state){...}}
    }
    const store = new Vuex.Store({
    	modules:{
    		test1,test2
    	}
    })
    
    ...mapState('test1',['test']),//读取state数据
    ...mapGetters('test1',['test']),//读取Getters数据
    ...mapMutations('test1',{...}),//读取Mutations数据
    ...mapActions('test1',{...})//读取Actions数据

扩展
  • nextTick(也是一种常用的声明周期钩子):在下一次DOM更新结束后执行其指定的回调(即当改变数据后,基于更新后的新Dom进行某些操作时,要在nextTick所指定的回调函数中执行)
    • 如:this.$nextTick(回调函数)

VUE-脚手架配置代理

在vue.config.js中配置代理

  • 单一服务器代理
devServer: {
    proxy: 'http://localhost:5000',
    webSocketServer: false
}
  • 多种服务器代理
devServer: {
    proxy: {
        '/api1':{ //匹配所有以'/api1'开头的请求路径
            target: 'http://localhost:5000', //代理目标服务器的基础路径
            changeOrigin:true, //默认为true,true:服务器收到的请求头中host为 localhost:5000;false:服务器收到的请求头中host为 localhost:8080
            pathRewrite:{'^/api1':''} //替换匹配为空,避免后端服务无法识别请求真实路径
        },
        '/api2':{
            target: 'http://localhost:5001',
            changeOrigin:true,
            pathRewrite:{'^/api2':''}
        }
    }
}
  • 两者区别
    • 单一服务代理
      • 配置简单,但不能配置多个代理导致不能灵活控制请求是否走代理;当请求的前端资源不存在时,那么该请求才会转发给服务器(即优先匹配前端资源)
    • 多服务器代理
      • 可配置多个代理,灵活控制请求是否走代理;但配置略微繁琐且资源必须加前缀
  • 注意
    • 代理服务器:常用的解决跨域问题方案(即浏览器请求服务器出现不同源的问题(即协议+主机名+端口中不完全一致));原理在于服务器之间传输数据不存在跨域问题
      • 备注:还可以通过CORS(效果是一劳永逸-后端处理)和Jsonp处理跨域问题

VUE-基于transition的过渡与动画

  • 在插入、更新或者移除DOM元素时,在合适的时候给元素添加样式类名
  • 官网:https://cn.vuejs.org/guide/built-ins/transition.html
  • 使用步骤
    • 准备好样式
      • 元素进入的样式
        • v-enter:进入的起点
        • v-enter-active:进入过程中
        • v-enter-to:进入的终点
      • 元素离开的样式
        • v-leave:离开的起点
        • v-leave-active:进入过程中
        • v-leave-to:进入的终点
      • 使用<transition>包裹要过渡的元素
      • 注意:若有多个元素需要过渡,则需要使用<transition-group>,且每个元素都要指定key值

VUE-插槽Slot

  • 作用: 让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于父组件===>子组件
  • 官网:https://cn.vuejs.org/guide/components/slots.html
  • Slot分类

    • 默认Slot

父组件
<Category>
    <div>html结构1</div>
</Category>
子组件
<template>
    <div>
        <slot>插槽默认内容</slot>
    </div>
</template>
  • 具名Slot
  • 父组件
    <Category>
        <template slot="demo1">
            <div>html结构1</div>
        </template>
        <template v-slot:demo2>
            <div>html结构2</div>
        </template>
    </Category>
    子组件
    <template>
        <div>
            <slot name='demo1'>插槽默认内容1</slot>
            <slot name='demo2'>插槽默认内容2</slot>
        </div>
    </template>
  • 作用域Slot
    • 数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定

VUE-vue-router

  • vue-router是一个vue的插件库,专门用来实现SPA应用
    • SPA应用
    • 单页web应用
    • 整个应用只有一个完整的页面
    • 点击页面中的导航链接不会刷新页面,只会做页面的局部更新
    • 数据需要通过ajax请求获取
  • 路由
    • 一个路由就是一组映射key:value关系,其中key为路径,value可能是function或者组件
    • 路由可以分为前端路由和后端路由
      • 前端路由
        • value是组件component,用于展示页面内容
        • 当浏览器的路径改变时,对应的组件就会显示
      • 后端路由
        • value是function,用于处理客户端提交的请求
        • 当服务器收到请求后,根据请求路径找到匹配的函数来处理请求,返回响应数据
基本使用
  • 安装vue-router命令:npm i vue-router
  • 使用插件:Vue.use(VueRouter)
  • 编写router配置项
  • //创建router实例对象,统一管理每组的路由规则
  • const router = ({
    	routers:[
    		{
    			path: '/test1',
    			component:Test1,
    			//多级路由:使用children配置子级路由
    			children:[
    				{
    					name:'hello',//给路由命名,简化路由的跳转写法
    					path:'test1Child1', //此处不要写成'/test1Child1',默认会加'/'
    					component:Test1-1,
    					//接收参数
    					query:{
    						id:id,
    						name:name
    					}
    				},
    				{
    					path: 'test1Child2',
    					component:Test1-2				
    				}
    			]
    		},
    		{
    			path: '/test2',
    			component:Test2
    		},
    	]
    })
    export default router
  • 实现切换

    • <router-link to='/test1'>Test1</router-link>
    • 多级路由跳转:<router-link to='/test1/test1Child1'>Test1</router-link>
    • 多级路由传递参数跳转:<router-link to='{path:'/test1/test1Child1(路由命名后可简化写为hello)',query:{id:001,name:'墨行'}}'>Test1</router-link>(接收参数:$route.query.id/name)
  • 指定展示位置:<router-view></router-view>
  • 注意
    • 路由组件通常存放在pages文件夹下,一般组件位于components文件夹下
    • 切换过程中,'隐藏'的路由组件默认是被销毁的,需要时重新挂载
    • 每个组件都有自己的$route属性,里面存储自己路由信息
    • 整个应用只有一个router,可以通过$router属性获取
路由props参数
  • 可以让路由组件更加方便收到参数
  • ...
    props(route){
    	return {
    		id:route.query.id,
    		name:route.query.name
    	}
    }
    ...
    <router-link>的replace&push属性
    • 分别是控制路由跳转时操作浏览器历史记录的模式,push是追加历史的记录,replace是替换当前记录,路由跳转时候默认push模式
    • 开启replace模式:<router link replace ...>Hello<router-link>
编程式路由导航
  • 不借助<router-link>实现路由跳转的另外一种方式,让路由跳转更加灵活
  • 编程式路由导航相关API
this.$router.push({//push模式
	name:'test1',
	params:{
		id:xxx,
		name:xxx
	}
})

this.$router.replace({//replace模式
	name:'test1',
	params:{
		id:xxx,
		name:xxx
	}
})
this.$router.forward()//前进
this.$router.back()//后退
this.$router.go()//前进
缓存路由组件
  • 让不展示的路由组件保持挂载,不被销毁
  • <keep alive include='test1'>
    	<router-view></router-view>
    </keep-alive>
生命周期钩子activated|deactivated
  • 路由组件独有的两个钩子,用于捕获路由组件的激活状态
    • activated:路由组件被激活时触发
    • deactivated:路由组件失活时触发
路由守卫
  • 作用就是对路由进行权限控制
  • 分为全局守卫,独享守卫,组件内守卫
  • router.beforeEach((to,from,next)=>{...})//全局前置守卫,初始化时执行,每次路由切换前执行
    router.afterEach((to,from,next)=>{...})//全局后置守卫,初始化时执行,每次路由切换后执行
    beforeEnter(to,from,next){...})//独享守卫
    beforeRouteEnter(to,from,next){...})//进入组件守卫,通过路由规则,进入该组件时被调用
    beforeRouteLeave(to,from,next){...})//离开组件守卫,通过路由规则,离开该组件时被调用
路由器的两种模式
  • hash模式
    • url中的hash值:#及其后面的内容
    • hash值不会包含在HTTP请求中,即hash值不会附带发送到服务器
    • url地址中永远带着#,不美观
    • 若将url地址通过第三方app分享,若app校验严格则会被标记为不合法
    • 兼容性较好
  • history模式
    • 地址干净美观
    • 兼容性和hash模式相比略差
    • 应用部署上线时需后端人员解决刷新页面服务器404问题(服务器端可通过第三方库解决)

VUE-UI组件库

  • 移动端常用UI组件库
  • PC端常用UI组件库
    • Element UI:应该是大家使用最为频繁的一款
    • IView UI:也称为View Design,一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品,目前也是我司使用的UI组件库[官网:介绍 - iView (iviewui.com)]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java SE语法篇】10.String类

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ 文章目录 前言1. String类1.1 字符串的构造1.2 String对象的比…

将Sqoop与Hive集成无缝的数据分析

将Sqoop与Hive集成是实现无缝数据分析的重要一步&#xff0c;它可以将关系型数据库中的数据导入到Hive中进行高级数据处理和查询。本文将深入探讨如何实现Sqoop与Hive的集成&#xff0c;并提供详细的示例代码和全面的内容&#xff0c;以帮助大家更好地了解和应用这一技术。 为…

GIT SourceTree 回滚提交

步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 在终端输入命令&#xff08;位置是项目目录下&#xff09; git push origin feature_mo2.1_r3_zhanx653 -f

任务15:使用Hive进行全国气象数据分析

任务描述 知识点&#xff1a; 使用Hive进行数据分析 重 点&#xff1a; 掌握Hive基本语句熟练使用Hive对天气数据进行分析 内 容&#xff1a; 使用Hive创建外部表使用Hive对数据进行统计分析 任务指导 1. 使用Hive创建基础表 将China_stn_city.csv文件上传到HDFS的/…

数学建模day16-预测模型

本讲首先将介绍灰色预测模型&#xff0c;然后将简要介绍神经网络在数据预测中的应用&#xff0c;在本讲的最 后&#xff0c;我将谈谈清风大佬对于数据预测的一些看法。 注&#xff1a;本文源于数学建模学习交流相关公众号观看学习视频后所作 目录 灰色系统 GM(1,1)…

C# 面向切面编程之AspectCore初探

写在前面 AspectCore 是Lemon名下的一个国产Aop框架&#xff0c;提供了一个全新的轻量级和模块化的Aop解决方案。面向切面也可以叫做代码拦截&#xff0c;分为静态和动态两种模式&#xff0c;AspectCore 可以实现动态代理&#xff0c;支持程序运行时在内存中“临时”生成 AOP 动…

【PID精讲 14 】积分分离PID和抗积分饱和PID

文章目录 一、积分分离PID1.1 积分分离PID算法基本思想1.2 积分分离PID算法实现步骤1.3 积分分离PID算法1.4 积分分离PID算法实现1.5 积分分离PID算法仿真实例1.6 积分分离PID算法的优缺点 二、抗积分饱和PID2.1 积分饱和现象2.2 抗积分饱和算法2.3 抗积分饱和算法实现2.4 抗积…

免费的域名要不要?

前言 eu.org的免费域名相比于其他免费域名注册服务&#xff0c;eu.org的域名后缀更加独特。同时&#xff0c;eu.org的域名注册也比较简单&#xff0c;只需要填写一些基本信息&#xff0c;就可以获得自己的免费域名。 博客地址 免费的域名要不要&#xff1f;-雪饼前言 eu.org…

bee工具的使用及创建第一个项目

前提文章&#xff1a;beego的安装及配置参数说明-CSDN博客 提示&#xff1a;beego框架下项目需要再GOPATH/src下进行开发&#xff0c;我的GOPATH是C:\Users\leell\go web项目创建 通过 bee new 创建web项目 C:\Users\leell\go\src>bee new beego-web 2024/01/15 21:40:0…

使用ffmpeg进行视频截取

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-version3 --enable-sta…

概率论与数理统计————3.随机变量及其分布

一、随机变量 设E是一个随机试验&#xff0c;S为样本空间&#xff0c;样本空间的任意样本点e可以通过特定的对应法则X&#xff0c;使得每个样本点都有与之对应的数对应&#xff0c;则称XX&#xff08;e&#xff09;为随机变量 二、分布函数 分布函数&#xff1a;设X为随机变量…

VC++读取ini文件示例2

之前学习过ini文件读写&#xff1b;继续熟悉&#xff1b; CString str1;UINT m1 0;UINT m2 0;TCHAR p1[32];m1 GetPrivateProfileString(_T("mymoney1"), _T("moneyname1"), _T("空"), p1, sizeof(p1), _T("E:\\VCPrj\\VC2015\\cattest\…

transbigdata笔记:其他方法

1 出租车相关 1.1 taxigps_to_od 提取出租车OD信息 transbigdata.taxigps_to_od(data, col[VehicleNum, Stime, Lng, Lat, OpenStatus]) 输入出租车GPS数据&#xff0c;提取OD信息 data出租车GPS数据col[VehicleNum, Time, Lng, Lat, OpenStatus]五列 比如GPS数据长这样&am…

ITIL 4—变更支持实践

一、术语和概念 任何可能对服务产生直接或间接影响的添加&#xff0c;修改或删除行为。 变更支持实践要确保每个变更都能达到预期的结果。这与聚焦价值的指导性原则是相互统一的。与变更的技术细节相比&#xff0c;利益相关者更关心变更带来的价值。有时候&#xff0c;虽然准…

【算法与数据结构】Java实现查找与排序

文章目录 第一部分&#xff1a;查找算法二分查找插值查找分块查找哈希查找树表查找 第二部分&#xff1a;排序算法冒泡排序选择排序插入排序快速排序 总结 第一部分&#xff1a;查找算法 二分查找 也叫做折半查找&#xff0c;属于有序查找算法。 前提条件&#xff1a;数组数据…

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

西米支付:到底什么是NFT(数字藏品支付通道)(NFT支付通道)

NFT到底指的是什么呢&#xff1f; 数字藏品的实际意义在于它们打破了传统艺术品的物质形态束缚。数字藏品可以通过虚拟现实和区块链技术进行创作、展示和交易。它们不仅可以满足人们对艺术品的审美需求&#xff0c;还可以成为一种投资和资产保值增值的方式。数字藏品的实际意义…

128基于matlab的粒子群优化算法寻找多元函数的最大值

基于matlab的粒子群优化算法寻找多元函数的最大值&#xff0c;可定义多元函数&#xff0c;变量区间范围&#xff0c;输出最大值条件下的变量值。程序已调通&#xff0c;可直接运行。 128matlab多元函数极值 (xiaohongshu.com)

小程序基础学习(缓存)

目录 设置用户信息缓存(同步): wx.setStorageSync(key,value) ​编辑 获取用户信息缓存(同步): wx.getStorageSync(key) 删除用户信息缓存(同步): wx.removeStorageSync(key) 清空用户信息缓存(同步): wx.clearStorageSync() 设置用户信息缓存加密信息(异步): wx.setStorage(…

flink 1.18 sql gateway /sql gateway jdbc

一 sql gateway 注意 之所以直接启动gateway 能知道yarn session 主要还是隐藏的配置文件&#xff0c;但是配置文件可以被覆盖&#xff0c;多个session 保留最新的applicationid 1 安装flink &#xff08;略&#xff09; 2 启动sql-gatway(sql-gateway 通过官网介绍只能运行…