Vue笔记
记录了一些在学习Vue过程中的基础知识点
动态绑定
1 | <script setup> |
计算函数
1 | <script setup> |
监听函数
1 | <script setup> |
延时函数
1 | <script setup> |
父子通信
父传子
1 | <!-- 父组件 --> |
子传父
1 | <!-- 子组件通过defineEmits定义需要传给父组件的key,通过调用该对象并传入要传送的key和value --> |
模板引用
1 | <script setup> |
跨层组件通信
1 | <!-- 父组件 --> |
路由
1 | import { createRouter, createWebHashHistory } from "vue-router"; |
仓库
1 | import { defineStore } from "pinia"; |
持久化
安装插件:pnpm i pinia-plugin-persistedstate
在main.ts中注册
1
2
3
4import presist from 'pinia-plugin-persistedstate'
const app = createApp(App)
app.use(createPinia().use(presist))
app.mount('#app')开启持久化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import { defineStore } from "pinia";
import type { User } from '@/types/user'
import { ref } from "vue";
export const useUserStore = defineStore('cp-user', () => {
const user = ref<User>()
const setUser = (u: User) => {
user.value = u
}
const delUser = (u: User) => {
user.value = undefined
}
return { user, setUser, delUser }
},{
persist: true //开启本地持久化
})axios配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49import { useUserStore } from "@/stores/main"
import axios from "axios"
import { showToast } from "vant"
const instance = axios.create({
baseURL: 'https://www.baidu.com', //配置基准地址
timeout: 10000 //设置超时时间
})
instance.interceptors.request.use(
(config) => {
const store = useUserStore()
if (store.user?.token && config.headers){
config.headers.Authorization = `Bearer ${store.user.token}`
}
return config
},
(err) => Promise.reject(err)
)
instance.interceptors.response.use(
(res) => {
if (res.data.code != 10000){
showToast(res.data.message || '业务失败')
return Promise.reject(res.data)
}
return res.data
},
(err) => {
return Promise.reject(err)
}
)
const login = () => {
axios.request({
url: 'login',
method: 'post',
data: {
username: 'username',
password: '121121'
}
})
.then(() => {
console.log("成功")
}).catch((err) => {
console.log('失败', err)
})
}
组件自动注册
安装unplugin-vue-components
pnpm add unplugin-vue-components -d
配置vite.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// 配置组件自动注册的插件
// 配置vant UI 组件库的解析器
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'
// https://vite.dev/config/
export default defineConfig({
plugins: [
vue(),
vueDevTools(),
Components({
dts: false, //关闭组件类型声明
resolvers: [VantResolver({ importStyle: false })] //配置不注册样式,因为在main导入了
})
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
},
},
})
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 way的个人博客!