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

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

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方法可以设置主题色为红色。

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

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

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

相关文章

知识继承概述

文章目录 知识继承第一章 知识继承概述1.背景介绍第一页 背景第二页 大模型训练成本示例第三页 知识继承的动机 2.知识继承的主要方法 第二章 基于知识蒸馏的知识继承预页 方法概览 1.知识蒸馏概述第一页 知识蒸馏概述第二页 知识蒸馏第三页 什么是知识第四页 知识蒸馏的核心目…

冠达管理:哪里查中报预增?

中报季行将到来&#xff0c;投资者开端重视公司的成绩体现。中报预增是投资者最关心的论题之一&#xff0c;因为这意味着公司未来成绩的增加潜力。但是&#xff0c;怎么查找中报预增的信息呢&#xff1f;本文将从多个视点分析这个问题。 1.证券交易所网站 证券交易所网站是投资…

如何用输入函数为数组赋值

在编写程序时我们经常使用数组&#xff0c;而数组的大小可能是很大的但是我们并不需要为每个元素都自己赋值&#xff0c;我们可能会自定义输入数组元素个数&#xff0c;我们应该如何实现通过输入函数为数组赋值呢&#xff1f; 目录 第一种&#xff1a; 第二种&#xff1a; 第一…

【Vue-Router】导航守卫

前置守卫 main.ts import { createApp } from vue import App from ./App.vue import {router} from ./router // import 引入 import ElementPlus from element-plus import element-plus/dist/index.css const app createApp(App) app.use(router) // use 注入 ElementPlu…

8.文件存储空间管理

第四章 文件管理 8.文件存储空间管理 空闲表法&#xff1a;   空闲盘块表和在内存管理的动态分区分配中学习过的空闲分区表是类似的&#xff0c;空闲盘块表记录了每一个空闲区间的起始位置和这个空闲区间的长度这两个信息。像第一个空闲区间是0&#xff0c;1这两个空闲块&am…

成集云 | 电子签署集成腾讯云企业网盘 | 解决方案

源系统成集云目标系统 方案介绍 电子签署是通过电子方式完成合同、文件或其他文件的签署过程。相较于传统的纸质签署&#xff0c;电子签署具有更高效、更便捷、更安全的优势。 在电子签署过程中&#xff0c;使用电子签名技术来验证签署者的身份并确保签署文件的完整性。电子…

万宾燃气管网监测解决方案,守护城市生命线安全

方案背景 城市燃气管网作为连接天然气长输管线与天然气用户的桥梁&#xff0c;担负着向企业和居民用户直接供气的重要职责。随着城市燃气需求的急剧增加&#xff0c;城市燃气管网规模日趋庞大&#xff0c;安全隐患和风险也随之增加。目前&#xff0c;我国燃气管网的运行仍存在…

AWS EKS 集群自动扩容 Cluster Autoscaler

文章目录 一&#xff0c;需求工作需求说明 二&#xff0c;部署精简命令执行1&#xff0c;要求2&#xff0c;查看EC2 Auto Scaling groups Tag3&#xff0c;创建Serviceaccount需要的Policy&#xff0c;Role4&#xff0c;部署Cluster Autoscaler5&#xff0c;验证6&#xff0c;常…

微服务系列文章之 Springboot+Vue实现登录注册

一、springBoot 创建springBoot项目 分为三个包&#xff0c;分别为controller&#xff0c;service&#xff0c; dao以及resource目录下的xml文件。 添加pom.xml 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mave…

macOS - 安装使用 libvirt、virsh

文章目录 关于 libvirt使用安装启动服务virsh 交互模式virsh 帮助命令 关于 libvirt libvirt 官网&#xff1a; https://libvirt.org/gitlab : https://gitlab.com/libvirt/libvirtgithub : https://github.com/libvirt/libvirt 只读&#xff0c;gitlab 的镜像 libvirt是一套…

学习笔记:Opencv实现图像特征提取算法SIFT

2023.8.19 为了在暑假内实现深度学习的进阶学习&#xff0c;特意学习一下传统算法&#xff0c;分享学习心得&#xff0c;记录学习日常 SIFT的百科&#xff1a; SIFT Scale Invariant Feature Transform, 尺度不变特征转换 全网最详细SIFT算法原理实现_ssift算法_Tc.小浩的博客…

hive高频使用的拼接函数及“避坑”

hive高频使用的拼接函数及“避坑” 说到拼接函数应用场景和使用频次还是非常高&#xff0c;比如一个员工在公司充当多个角色&#xff0c;我们在底层存数的时候往往是多行&#xff0c;但是应用的时候我们通常会只需要一行&#xff0c;角色字段进行拼接&#xff0c;这样join其他…

Mariadb高可用MHA

目录 前言 一、概述 &#xff08;一&#xff09;、概念 &#xff08;二&#xff09;、组成 &#xff08;三&#xff09;、特点 &#xff08;四&#xff09;、工作原理 二、案例 &#xff08;一&#xff09;、构建MHA 1.所有节点ssh免密登录 2、MySQL主从复制 &#x…

【计算机设计大赛】国赛一等奖项目分享——基于多端融合的化工安全生产监管可视化系统

文章目录 一、计算机设计大赛国赛一等奖二、项目背景三、项目简介四、系统架构五、系统功能结构六、项目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;数据可视化&#xff08;3&#xff09;计算机视觉&#xff08;目标检测&#xff09; 七、系统界面设计&am…

【ESP系列】ESP01S官方MQTT案例实验

前言 偶然发现安信可官网有ESP01S和STM32连接TCP和MQTT的案例。弄了一两天&#xff0c;把我使用的流程在这里记录下。MQTT的固件一定要烧录进去&#xff0c;默认固件是没有MQTT相关的AT指令的。 环境 Keli5&#xff0c;STM32F103C8T6 官方Keil工程链接&#xff1a;ESP8266的S…

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效…

换过3个工作,我却得出10年测试人的血泪经验

我跟大多数IT职场的测试新人起点差不多&#xff0c;在测试的这条路上&#xff0c;没有天生的聪明天资&#xff0c;也没有一个耀眼的学历。在北京这样一个随便一个同事不是清华的本硕&#xff0c;就是北邮北航的硕士下&#xff0c;自己也常常感到惭愧。 自己从事测试多年&#…

【SLAM】ORBSLAM34macOS: ORBSLAM3 Project 4(for) macOS Platform

文章目录 配置ORBSLAM34macOS 版本运行步骤&#xff1a;版本修复问题记录&#xff1a;编译 fix运行 fix 配置 硬件&#xff1a;MacBook Pro Intel CPU 系统&#xff1a;macOS Ventura 13.4.1 ORBSLAM34macOS 版本 https://github.com/phdsky/ORB_SLAM3/tree/macOS 运行步骤&…

【模拟集成电路】反馈系统——基础到进阶(一)

【模拟集成电路】反馈系统——基础到进阶 前言1 概述2 反馈电路特性2.1增益灵敏度降低2.2 终端阻抗变化2.3 带宽拓展2.4 非线性减小 3 放大器分类4 反馈检测和返回机制4.1 按照检测物理量分类4.2 按照检测拓扑连接分类 5 反馈结构分析6 二端口方法7 波特方法6 麦德布鲁克方法 前…

归并排序:从二路到多路

前言 我们所熟知的快速排序和归并排序都是非常优秀的排序算法。 但是快速排序和归并排序的一个区别就是&#xff1a;快速排序是一种内部排序&#xff0c;而归并排序是一种外部排序。 简单理解归并排序&#xff1a;递归地拆分&#xff0c;回溯过程中&#xff0c;将排序结果进…