vue3小知识点汇总——基础积累

news2024/11/19 7:22:49

下面的小知识点比较零散,但是脑子不太好使,只能先记录一下啦,后面知识丰富起来后,慢慢就懂了。

1.最新版node.js已经不兼容vue2的项目了,学习vue3势在必行

node.js的安装及vue的搭建详细步骤:http://t.csdn.cn/23IKN

2.vscode软件要禁用vetur,因为vue3vetur不完全兼容,会报错

3.vue2中的propsvue3中对应defineProps,写法基本一致。

defineProps:{
	prefix:{
		type:String,
		default:'#icon-'
	}
}

4.刷新当前页面的写法

在组件上添加v-if="flag",然后监听刷新按钮后,更改flag的值,就会实现当前页面的刷新。

import {reactive,ref} from 'vue';
let layOutSettingStore = reactive({
	refresh:false
})
let flag = ref(false);
watch(()=>layOutSettingStore.refresh,()=>{
	flag.value = false;
	nextTick(()=>{
		flag.value = true
	})
})

5.全屏与取消全屏的功能实现

//全屏按钮点击的回调
const fullScreen = ()=>{
	//DOM对象的一个属性:可以用来判断当前是不是全屏模式[全屏:true,不是全屏:false]
	let full = document.fullscreenElement;
	//切换为全屏模式
	if(!full){
		//文档根节点的方法requestFullscreen,实现全屏模式
		document.documentElement.requestFullscreen();
	}else{
		//变为不是全屏模式->退出全屏模式
		document.exitFullscreen();
	}
}

6.vuex4.0也就是pinia,通过解构的方式,不会失去响应式

import {storeToRefs} from 'pinia';//解构不会失去响应式

7.ref可以定义数值/字符串/布尔值/数组等

import {ref} from 'vue';
let pageNo = ref<number>(1);
let flag = ref<boolean>(false);
let str = ref<string>('');
let arr = ref<any>([]);

8.elementPlus中的table中字段的自定义写法

在这里插入图片描述

<el-table-column label="名称">
	<template #="{row,$index}">
		<pre>{{row.name}}</pre>
	</template>
</el-table-column>

9.配置eslintprettier的问题

配置完eslint和prettier都不生效,运行lint以后报错 prettier.resolveConfig.sync is not a function
解决办法pnpm install -D eslint-plugin-import@2.27.5 eslint-plugin-vue@9.9.0 eslint-plugin-node@11.1.0 eslint-plugin-prettier@4.2.1 eslint-config-prettier@8.6.0 @babel/eslint-parser@7.19.1
pnpm install -D prettier@2.8.7
pnpm install -D eslint@8.5.0
安装指定版本

10.vite-plugin-mock版本导致的Cannot read properties of undefined (reading 'token')报错

Cannot read properties of undefined (reading ‘token’)报错
解决方法:如果vite-plugin-mock 降了版本到2.0.0 ,要升到2.9.6
原因:好像低版本 mock的获取信息请求 response: (request) ,得不到config

mock中配置文件会报错,是因为vite-plugin-mock版本太新与vite版本不兼容导致的,可以 pnpm i vite-plugin-mock@2.0.0版本就可以了.我们现在是3.0.0版本

11.pinia版本的报错问题

pinia中用2.1.3版本的会报错,建议用2.0.23版本

12.toRefs的用法

setup

let str = reactive({name:'张三',salary:26000,id:9})
//解构数据
let {salary} = str;
//这种解构赋值会使数据变成不能响应的数据

为了保证响应式,则需要使用toRefs

import {toRefs} from 'vue';
//使用toRefs(响应式数据)方式来解构数据,在解构响应式数据时,还保持它的响应式特征
let {salary} = toRefs(str);
//注意使用toRefs()后,解构出来的数据需要通过.value来操作
let add = ()=>{
	salary.value *= 2;
}

13.vue3中获取表格当前行数据并更改,vue2用解构,vue3可以使用Object.assign

let params = reactive({});
//ES6语法合并对象——row是当前行的数据对象
Object.assign(params,row);

14.关于form表单校验中的image图片上传的规则不生效问题

这个问题,在vue2中也是存在的,因此当时我的解决办法就是不设置为rule,然后通过form-item中的label插槽来手动添加一个红色的*,最后在提交调用接口的时候进行判断。

简单方法应该是:
通过自定义校验规则来书写:

const validatorUrl = (rule:any,value:any,callBack:any)=>{
	//如果图片上传
	if(value){
		callBack();
	}else{
		callBack(new Error('图片必须上传'))
	}
}

添加校验规则后,图片上传失败会提示,图片上传成功后,错误提示还会存在,此时需要手动请求校验。

//图片上传成功钩子
const handleAvatarSuccess:UploadProps['onSuccess'] = (response,uploadFil)=>{
	//response:即为当前这次上传图片Post请求服务器返回的数据
	params.url = response.data;
	//图片上传成功后,清除掉对应图片的校验结果
	formRef.value.clearValidate('url');
}

15.vue3中的form表单提交——通过异步校验写法

import {ref} from 'vue';
const formRef = ref();//formRef就是form表单中的ref绑定的值
const confirm = async ()=>{
	//在发送请求之前,要对于整个表单进行校验
	//调用这个方法进行全部表单校验,如果校验通过,再执行后面的语法
	await formRef.value.validate();
	let result:any = await reqAddOrUpdateTrademark(params);//调用请求接口
	if(result.code==200){
		ElMessage({
			type:'success',
			message:params.id?'修改成功':'添加成功'
		})
	}
}

16.通过递归筛选菜单数据

let ceshiData = ['Product','Trademark','Sku'];
let asyncRoute = [];//这个是异步的路由数据,一般都是从router文件中引入的
function filterAsyncRoute(asyncRoute,routes){
	return asyncRoute.filter(item=>{
		if(routes.includes(item.name)){
			if(item.children&&item.children.length>0){
				item.children = filterAsyncRoute(item.children,routes)
				//重点是这一句,因为我之前的处理方法直接写后面的部分,没有给item.children赋值,这样是会出现问题的。
			}
			return true
		}
	})
}
filterAsyncRoute(asyncRoute,ceshiData);

17.获取权限后更改菜单的部分处理

async userInfo(){
	//获取用户信息进行存储仓库当中[用户头像,名字]
	let result:any = await reqUserInfo();//调用请求用户信息的接口
	//如果获取用户信息成功,存储一下用户信息
	if(result.code == 200){
		this.username = result.data.name;
		this.avatar = result.data.avatar;
		//计算当前用户需要展示的异步路由
		let userAsyncRoute = filterAsyncRoute(asyncRoute,result.data.routes);
		//菜单需要的数据整理完毕
		this.menuRoutes = [...constantRoute,...userAsyncRoute,anyRoute];
		//目前路由器管理的只有常量路由,用户计算完毕后需要对异步路由和任意路由进行追加
		[...userAsyncRoute,anyRoute].forEach((route:any)=>{
			router.addRoute(route);
		})
		return 'ok';
	}else{
		return Promise.reject(new Error(result.message));
	}
}

18.lodash中的深拷贝——cloneDeep

安装lodash:npm i lodash

//引入深拷贝方法
//忽略ts校验
//@ts-ignore
import cloneDeep from 'lodash/cloneDeep';

使用方法:比如上面的这一行代码:
let userAsyncRoute = filterAsyncRoute(asyncRoute,result.data.routes);

应该改为:
let userAsyncRoute = filterAsyncRoute(cloneDeep(asyncRoute),result.data.routes);

19.返回首页

<script setup lang="ts">
import {useRouter} from 'vue-router';
let $router = useRouter();
const goHome = ()=>{
	$router.push('/home');
}
</script>

20.自定义指令的写法——判断元素是否有权限,有则显示,无则隐藏

import pinia from '@/store';
import useUserStore from '@/store/modules/user';
let userStore = useUserStore(pinia);
export const isHasButton = (app:any)=>{
	//获取对应的用户仓库
	//全局自定义指令:实现按钮的权限
	app.directive('has',{
		//代表使用这个全局自定义指令的DOM|组件挂载完毕的时候会执行一次
		mounted(el:any,options:any){
			if(!userStore.buttons.includes(options.value)){
				el.parentNode.removeChild(el);
			}
		}
	})
}

21.设置主题颜色

//主题颜色的设置
const setColor = ()=>{
	//通知js修改根节点的样式对象的属性与属性值
	const html = document.documentElement;
	html.style.setProperty('--el-color-primary','red');
}

此时通过setColor方法可以设置主题色为红色。

完成!!!
多多积累,多多收获!!!

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

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

相关文章

比特币暴跌的4个原因

作者&#xff1a;秦晋 加密市场每隔一段时间&#xff0c;就会迎来一次「暴跌」&#xff0c;而且每次暴跌原因各不相同。但归根到底都是「恐慌情绪」在作怪。继「312暴跌」、「519暴跌」之后&#xff0c;又迎来一个「8.18暴跌」。相比前两次暴跌&#xff0c;此次暴跌的原因或许略…

想做赴日程序员 有一定技术经验不学日语可以赴日IT吗?

有的小伙伴问&#xff1a;我有一定的IT技术和经验&#xff0c;不学日语的话&#xff0c;能去做赴日IT工作吗&#xff1f;说实话啊&#xff0c;我感觉如果行的话&#xff0c;那只能说明你运气不错&#xff0c;因为日本的IT行业在日本来说&#xff0c;并不是非常高薪的行业&#…

Redis中的有序集合

前言 本文着重介绍Redis中的有序集合的底层实现中的跳表 有序集合 Sorted Set Redis中的Sorted Set 是一个有序的无重复值的集合&#xff0c;他底层是使用压缩列表和跳表实现的&#xff0c;和Java中的HashMap底层数据结构&#xff08;1.8&#xff09;链表红黑树异曲同工之妙…

【深入了解PyTorch】PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析

【深入了解PyTorch】PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析 PyTorch实战项目示例:深入探索图像分类、目标检测和情感分析项目一:图像分类数据集准备构建模型训练模型模型评估和预测项目二:目标检测数据集准备构建模型训练模型模型评估和预测项目三:情…

记录因暴露阿里最高权限的Accesskey和secretKey导致的反弹shell攻击过程

Accesskey和SecretKey的泄露的原因 说到这个最高权限的key的泄露&#xff0c;绝对是低级的设计导致的。为了减少服务端的压力&#xff0c;直接让app直连oss服务&#xff0c;而且把最高权限的Accesskey和secretKey 下发到客户端&#xff0c;那么结果就是只要安装了该app的人&am…

js判断用户当前网络状态和判断网速

前端判断用户当前网络状态和判断网速 一、第一种是通过 HTML5 提供的 navigator 去检测网络(1)、原理介绍:(2)、兼容性 二、监听window.ononline和window.onoffline事件:三、通过ajax进行请求判断(兼容性好-推荐)(1)、原理介绍:(2)、注意: 四、navigator.connection方法监听网络…

PP-TS基于启发式搜索和集成方法的时序预测模型,使预测更加准确

时间序列数据在各行业和领域中无处不在&#xff0c;如物联网传感器的测量结果、每小时的销售额业绩、金融领域的股票价格等等&#xff0c;都是时间序列数据的例子。时间序列预测就是运用历史的多维数据进行统计分析&#xff0c;推测出事物未来的发展趋势。 为加快企业智能化转型…

Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态

需求&#xff1a;当弹出一个列表页数据&#xff0c;对其进行筛选选择。 列表更新&#xff0c;填充已选数据 主要使用toggleRowSelection 代码如下&#xff1a; <el-table v-loading"loading" :data"drugList" selection-change"handleSelection…

安卓手机跑 vins slam (1)

一直是手机拍照&#xff0c;用RealityCapture重建三维模型。因为他是靠特征点去把拍摄的多个图像进行对齐的。需要拍摄的足够多&#xff0c;且有特征才能对齐&#xff0c;要不然会生成多个组件&#xff0c;还得手动拼。 而且重建的三维模型有尺度问题&#xff0c;自动重建的模…

四、内存管理

1、为什么需要自己实现内存管理 (1)RTOS涉及的内核对象&#xff1a;task、queue、semaphores和event group等。为了让FreeRTOS更容 易使用&#xff0c;这些内核对象一般都是动态分配&#xff1a;用到时分配&#xff0c;不使用时释放。使用内存的动态管理功能&#xff0c;简化了…

使用yolov5进行安全帽检测填坑指南

参考项目 c​​​​​​​​​​​​​​GitHub - PeterH0323/Smart_Construction: Base on YOLOv5 Head Person Helmet Detection on Construction Sites&#xff0c;基于目标检测工地安全帽和禁入危险区域识别系统&#xff0c;&#x1f680;&#x1f606;附 YOLOv5 训练自己的…

Unity导入google.protobuf失败,无法找到google命名空间

问题&#xff1a; 1.刚开始把protobuf的文件夹直接从其他项目里(unity2021)里复制到unity(2020)版本&#xff0c;当时报错protobuf.dll的依赖项system.memory版本不对。 2.没有使用原来的protobuf文件了。使用vs2019的NuGet管理包来下载Google.Protobuf &#xff0c;仍然报错找…

爬虫学得好,然后呢?最新Python人工智能就业班课程

课程链接&#xff1a; 私信&#xff1a;达内 课程介绍&#xff1a; 【达内最新Python人工智能就业班课程目录】 &#x1f4da; 1. Python核心 &#x1f9e0; 2. 面向对象程序设计 &#x1f52e; 3. Python高级 &#x1f4bb; 4. 阶段项目实战 &#x1f427; 5. Linux操作系…

PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…

python的全局解释锁(GIL)

一、介绍 全局解释锁&#xff08;Global Interpreter Lock&#xff0c;GIL&#xff09;是在某些编程语言的解释器中使用的一种机制。在Python中&#xff0c;GIL是为了保证解释器线程安全而引入的。 GIL的作用是在解释器的执行过程中&#xff0c;确保同一时间只有一个线程可以…

win11安装ubuntu 子系统安装过程及注意事项

第一步 &#xff1a;安装系统必须组件 由于子系统是系统自带组件&#xff0c;需要安装软件支持 第二步&#xff1a;应用商店安装 ubuntu 编辑 编辑 这个时候打开会报错 第三步&#xff0c;运行linux子系统 选择Windows PowerShell 以管理员身份运行&#xff09; 输入&#…

docker基础操作练习

目录 1.安装docker服务&#xff0c;配置镜像加速器 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09; 4.容器的启动、 停止及重启操作 5.怎么查看正在…

微信个人号二次开发过程、微信ipad协议

友情链接&#xff1a;geweapi.com 点击即可访问 大家好&#xff0c;今天给大家介绍下ipad的具体情况以及特点 傻瓜式API&#xff0c;掌握JAVA、Go、PHP、Python等任意一种后端代码&#xff0c;你就可以 通过API 搭建一个 微信机器人功能 &#xff0c;用来自动管理微信消息 我们…

常用curl参数及样例讲解

1 缘起 后端/后台项目开发过程中&#xff0c;有两个阶段的接口测试和验证&#xff0c;自测阶段&#xff0c;通过Postman构建请求&#xff0c; 自建一些参数&#xff0c;测试功能以及边界条件&#xff0c;这些都是可以自行掌控的&#xff0c;当完成功能验证与前端对接时&#x…

以创新点亮前路,戴尔科技开辟数实融合新格局

编辑&#xff1a;阿冒 设计&#xff1a;沐由 2023年&#xff0c;对于戴尔科技而言是特殊的一年&#xff0c;这是戴尔科技进入中国市场第25个年头——“巧合”的是&#xff0c;这25年也是中国产业经济发展最快&#xff0c;人们工作与生活发生变化最大的四分之一个世纪。 2023年&…