vue 文件基本结构

<template></template>
<script setup></script>
<style lang="less">

vue 常用插件

  • vuex 全局状态管理
  • vue-router 路由管理
  • vite 框架搭建
  • tailwind css 框架
  • axios 接口封装
  • element-pluse ui组件
  • leaflet 地图框架
  • qiankun 微前端
  • create-form 表单生成
  • mockm 前端接口自定义

Vue3 自定义指令

定义文件

export default{mounted(el,binding,vnode){const {value} = bindingif(value){return true}return false}
}

使用 在mian.js 中引入定义好的文件

import XXX from "./XXX.js"
import {createApp} from "vue"
import App from './App'const app = createApp(App)app.directive('XXX',XXX)
app.mount("#app")

Vue3定义、获取全局函数

定义

import XXX from "./XXX.js"
import {createApp} from "vue"
import App from './App'
//创建
const app = createApp(App)app.config.globalProperties.XXX = XXX//挂载
app.mount("#app")

使用

//获取全局proxyconst {proxy} = getCurrentInstance()proxy.XXX()

在Vue3 中使用element-pluse icon组件

//安装
yarn add @element-plus/icons-vue
//引入
import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'app.use(elementIcons)
app.component('svg-icon', SvgIcon)

SvgIcon 封装

import * as components from '@element-plus/icons-vue'export default {install: (app) => {for (const key in components) {const componentConfig = components[key];app.component(componentConfig.name, componentConfig);}},
};

在Vue3中封装Axios

errorCode.js

export default {'401': '认证失败,无法访问系统资源','403': '当前操作没有权限','404': '访问资源不存在','default': '系统未知错误,请反馈给管理员'
}

request.js

import axios from 'axios'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: import.meta.env.VITE_APP_BASE_API,// 超时timeout: 10000
})service.interceptors.request.use() //请求拦截
service.interceptors.response.use()//响应拦截

文件下载

file-saver

//安装file-saver
npm instal file-saver
yarn add file-saver//引入
import {saveAs} from "file-saver"saveAs(blob,fileName)

Vue Hooks使用方法

Hooks 是做什么的
通俗讲就是钩子

一.在父组件生命周期中使用

在组件内部使用

import {ref,onMounted} from "vue"
export const useName=()={const name:string = ref("name")const getName=():string=>{return name.value}const setName = (value:string):void=>{name.value = value}
onMounted(()=>{console.log(name.value)
})return {name,getName,setName}
}

在组件外部使用

<template><child @hook:></child></template>
<script>
export default{setup(props){}
}
</script>

二.在组件中使用

新建hooks文件

import {ref,onMounted} from "vue"
export const useName=()={const name:string = ref("name")const getName=():string=>{return name.value}const setName = (value:string):void=>{name.value = value}return {name,getName,setName}
}

在文件中使用

import {useName} from "@/hooks/useName"
export default{setup(props){const {name,getName,setName} = useName()return {name,getName,setName}}
}

Vue 父组件向子组件传值

props

import {defineProps} from "vue"
const time = defineProps({time:Object
})
<children :time="time"></children>import children form './children'
import {ref} from 'vue'
const time = ref(new Date())

provide

import {inject} from 'vue'
const sub = inject("upperComp")//获取
sub.changeParams("你好")
import {provide,reactive} from "vue"
const params = reactive({title:"你好"
})
provide("upperComp",{params,changeParams:(value)=>{params.title = value}
})

Vue 子组件向父组件传

defineEmits

const emit = defineEmits(["changeTime"])const changeTime=()=>{emit('changeTime',value)
}
<children @changeTime></children>const changeTime=(value)=>{console.log(value)
}

Vue 中RouterView使用方法

<router-view v-slot="{Component}"><keep-alive><component :is="Component"></keep-alive>
</router-view>

vite 中定义文件别名设置跨域代理

import {resolve} from "path"
import {defineConfig} from 'vite'
import WindiCSS from 'vite-plugin-windicss'
import vue from '@vitejs/plugin-vue'
export dafault defineConfig({plugins:[vue(),WindiCSS()],//设置文件别名resolve:{alias:{"@":reslove(__dirname,'src')}},server:{//设置跨域代理proxy:{'/api':{target:"",changeOrigin:true,rewrite:(path)=>path.replace(/^\/api/,"")}}}
})

Vite使用外部变量

VITE_TITLE="我是vite"
VITE_APP_ENV=dev
VITE_BASE_URL="http://localhost:9000/"
VITE_APP_ENV=production
import.meta.env.VITE_BASE_URL

Vite 中动态引入组件

const modules = import.meta.glob("/src/views/**/**.vue") //引入全部组件
modules[`/src/views${item.url}/index.vue`] //使用组件

Vue3 使用ts 解决未定义interface 报错

在根目录定义env.d.ts

declare module 'js-cookie'
declare module 'nprogress'
declare module '*.vue' {import { DefineComponent } from 'vue'// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-typesconst component: DefineComponent<{}, {}, any>export default component
}

ref、reactive、toRef与toRefs 的区别

ref

用于为数据添加响应状态,因为reactive只能传入对象类型的参数,对于基本类型只能用ref,同样返回一个具有响应式状态的副本

  • 获取数值时需要加.value
  • 参数可以传递任意数据类型,传递对象类型时也能保持深度响应式
  • Vue3.0 setup里面定义数据时优先使用ref,方便逻辑拆分和业务解耦
import {ref} from "vue"const name = ref("Tom")const state = ref({count:0
})

reactive

reactive 用于为对象添加响应式状态
接受一个js对象作为参数,返回一个具有响应式状态的副本

  • 获取数值时直接获取,不需要添加.value
  • 参数只能传递对象类型
import {reactive} from "vue"const state = reactive({count:0
})console.log(state.count)

toRef

toRef用于为原响应式对象上的书香新建一个ref,从而保持对其源对象属性的响应式链接,
接受两个参数:源响应式对象和属性名称,返回一个ref数据
列如:使用父组件传递的props数据时,需要引入props的某一个属性且需要保持响应式连接时就很有用

  • 获取数据时需要添加.value
  • toRef后的ref数据如果是复杂类型数据时,不是原始数据的拷贝而是引用,改变结果也会导致原始数据的改变
import {toRef,defineProps} from 'vue'
const title = defineProps({title:{type:string,default:"Tom"}
})const myTitle = toRef(title,"title")

Vue3项目基本知识点相关推荐

  1. 【Vue】新建一个Vue3项目

    目录 1.新建vue项目 2.路径更改至新建的vue项目处 3.安装cnpm 4.cnpm安装vant3 5.安装babel-plugin 6.安装vue路由 7.安装axios 其他注意事项 仅用于 ...

  2. vue = 什么意思_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  3. vue-cli 将被 create-vue 替代?初始化基于 vite 的 vue3 项目为何如此简单?

    大家好,我是若川.最近组织了源码共读活动<1个月,200+人,一起读了4周源码>,已经有超50+人提交了笔记,群里已经有超1500人,感兴趣的可以点此链接扫码加我微信 ruochuan12 ...

  4. Vite --- 创建Vue3项目

    Vite 需要 Node.js 版本 >= 12.0.0. 1. node -v 查看node当前版本号 2. npm方式 创建Vue3项目 npm init @vitejs/app 输入项目名 ...

  5. cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程

    最近发现vue两大UI框架Element UI和Ant Design Vue都已经支持Vue3了,如果再不学习Vue3就落伍了,此文章记录下使用@vue/cli搭建Vue3项目完整流程. 1 安装vu ...

  6. 【信息系统项目管理师】第11章-项目风险管理 知识点详细整理

    个人资料,仅供学习使用 教程:信息系统项目管理师(第3版) 修改时间--2021年10月4日 15:12:26 参考资料: 信息系统项目管理师(第3版) 题目书(2021下半年)--马军 本文包括: ...

  7. 【信息系统项目管理师】第8章-项目质量管理 知识点详细整理

    个人资料,仅供学习使用 教程:信息系统项目管理师(第3版) 修改时间--2021年10月2日 16:24:45 参考资料: 信息系统项目管理师(第3版) 题目书(2021下半年)--马军 本文包括: ...

  8. 【信息系统项目管理师】第7章-项目成本管理 知识点详细整理

    个人资料,仅供学习使用 教程:信息系统项目管理师(第3版) 修改时间--2021年10月2日 10:54:17 参考资料: 信息系统项目管理师(第3版) 题目书(2021下半年)--马军 本文包括: ...

  9. vue3 项目搭建以及使用

    一.创建一个普通的vue3项目 创建一个普通的vue3项目 //注意如果之前安装过的话建议先卸载再重新安装 npm uninstall vue-cli -g //yarn global remove ...

最新文章

  1. C#快速生成数据数组
  2. java日期存入数据库_怎样在Java中将日期转化插入到数据库
  3. LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] c++
  4. 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...
  5. 坑 之 TypeError: List of Tensors when single Tensor expected
  6. Linux下C语言使用openssl库进行MD5校验
  7. 使用Predicate操作Collection集合
  8. HetGNN-Heterogeneous Graph Neural Network 异构图神经网络 KDD2019
  9. BigDecimal 小数 浮点数 精度 财务计算
  10. 怎么对神经网络重新训练,神经网络重建
  11. C语言统计素数并求和
  12. bmd硬盘测试_disk speed test mac版下载-Blackmagic Disk Speed Test for Mac(硬盘读写速度测试工具) v3.2免费版 - Mac天空...
  13. 原型设计工具Axure
  14. 清华师哥封神之作!RocketMQ核心笔记疯传Ali内网
  15. CKEditor/FCKEditor 使用-CKEditor(FCKeditor)精简版大全
  16. 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】
  17. 超搞笑,超拽的句子...
  18. 7-3 计算平均成绩 (15分)
  19. 北鲲云超算平台药物发现Cloud-HPCAI解决方案助力生命科学行业
  20. [渝粤教育] 南京大学 建筑设备 参考 资料

热门文章

  1. 安装和简单使用visual studio 2017
  2. ES6 JavaScript Promise的感性认知
  3. 图像分析之曲率滤波(困惑篇)
  4. 【报告分享】吴晓波2022跨年演讲全文(附下载)
  5. c++ybt 1702:异或运算
  6. matlab 龙格现象,利用MATLAB分析数值积分中的龙格(Runge)现象(1)
  7. 截至2018年,全球主要城市地铁里程分别为(单位:千米):上海:673,北京:608,莫斯科:437,伦敦:402,纽约:38等绘制如下图所示的全球主要城市地铁里程示意图。
  8. vuecli相关命令
  9. ROS入门21讲 | ROS机器人入门教程 【简明笔记】
  10. ETL工具Informatica开发流程 综合应用 电信通话计费系统开发项目案例10