欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3-pinia-ts項(xiàng)目中的使用示例詳解

 更新時(shí)間:2022年08月08日 16:09:54   作者:QQ帝國  
這篇文章主要介紹了vue3-pinia-ts項(xiàng)目中的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

 store.ts

import { defineStore } from "pinia";
import { GlobalState, ThemeConfigProp } from "./interface";
import { createPinia } from "pinia";
import piniaPersistConfig from "@/config/piniaPersist";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
 
// defineStore 調(diào)用后返回一個(gè)函數(shù),調(diào)用該函數(shù)獲得 Store 實(shí)體
export const GlobalStore = defineStore({
	// id: 必須的,在所有 Store 中唯一
	id: "GlobalState",
	// state: 返回對(duì)象的函數(shù)
	state: (): GlobalState => ({
		// token
		token: "",
		// userInfo
		userInfo: "",
		// element組件大小
		assemblySize: "default",
		// language
		language: "",
		// themeConfig
		themeConfig: {
			// 默認(rèn) primary 主題顏色
			primary: "#409EFF",
			// 深色模式
			isDark: false,
			// 灰色模式
			isGrey: false,
			// 色弱模式
			isWeak: false,
			// 面包屑導(dǎo)航
			breadcrumb: true,
			// 標(biāo)簽頁
			tabs: true,
			// 頁腳
			footer: true
		}
	}),
	getters: {},
	actions: {
		// setToken
		setToken(token: string) {
			this.token = token;
		},
		// setUserInfo
		setUserInfo(userInfo: any) {
			this.userInfo = userInfo;
		},
		// setAssemblySizeSize
		setAssemblySizeSize(assemblySize: string) {
			this.assemblySize = assemblySize;
		},
		// updateLanguage
		updateLanguage(language: string) {
			this.language = language;
		},
		// setThemeConfig
		setThemeConfig(themeConfig: ThemeConfigProp) {
			this.themeConfig = themeConfig;
		}
	},
	persist: piniaPersistConfig("GlobalState")
});
 
// piniaPersist(持久化)
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);
 
export default pinia;

main.ts

import { createApp } from "vue";
import App from "./App.vue";
import pinia from "@/store/index";
 
...
 
const app = createApp(App);
 
app.use(router).use(I18n).use(pinia).use(directives).use(ElementPlus).mount("#app");

頁面使用

<script setup lang="ts">
import { ref, reactive, onMounted } from "vue";
import { useRouter } from "vue-router";
import { Login } from "@/api/interface";
import { CircleClose, UserFilled } from "@element-plus/icons-vue";
import type { ElForm } from "element-plus";
import { ElMessage } from "element-plus";
import { loginApi } from "@/api/modules/login";
import { GlobalStore } from "@/store";
import { MenuStore } from "@/store/modules/menu";
import { TabsStore } from "@/store/modules/tabs";
import md5 from "js-md5";
 
const globalStore = GlobalStore();
const menuStore = MenuStore();
const tabStore = TabsStore();
 
// 定義 formRef(校驗(yàn)規(guī)則)
type FormInstance = InstanceType<typeof ElForm>;
const loginFormRef = ref<FormInstance>();
const loginRules = reactive({
	username: [{ required: true, message: "請(qǐng)輸入用戶名", trigger: "blur" }],
	password: [{ required: true, message: "請(qǐng)輸入密碼", trigger: "blur" }]
});
 
// 登錄表單數(shù)據(jù)
const loginForm = reactive<Login.ReqLoginForm>({
	username: "",
	password: ""
});
 
const loading = ref<boolean>(false);
const router = useRouter();
// login
const login = (formEl: FormInstance | undefined) => {
	if (!formEl) return;
	formEl.validate(async valid => {
		if (!valid) return;
		loading.value = true;
		try {
			const requestLoginForm: Login.ReqLoginForm = {
				username: loginForm.username,
				password: md5(loginForm.password)
			};
			const res = await loginApi(requestLoginForm);
			// * 存儲(chǔ) token
			globalStore.setToken(res.data!.access_token);
			// * 登錄成功之后清除上個(gè)賬號(hào)的 menulist 和 tabs 數(shù)據(jù)
			menuStore.setMenuList([]);
			tabStore.closeMultipleTab();
 
			ElMessage.success("登錄成功!");
			router.push({ name: "home" });
		} finally {
			loading.value = false;
		}
	});
};
 
// resetForm
const resetForm = (formEl: FormInstance | undefined) => {
	if (!formEl) return;
	formEl.resetFields();
};
 
onMounted(() => {
	// 監(jiān)聽enter事件(調(diào)用登錄)
	document.onkeydown = (e: any) => {
		e = window.event || e;
		if (e.code === "Enter" || e.code === "enter" || e.code === "NumpadEnter") {
			if (loading.value) return;
			login(loginFormRef.value);
		}
	};
});
</script>

到此這篇關(guān)于vue3-pinia-ts項(xiàng)目中的使用的文章就介紹到這了,更多相關(guān)vue3-pinia-ts使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過vue如何設(shè)置header

    通過vue如何設(shè)置header

    這篇文章主要介紹了通過vue如何設(shè)置header,每個(gè)項(xiàng)目都有頭部但是內(nèi)容不一樣;這種情況我們可以考慮在app.vue中創(chuàng)建公共頭部,那么怎么配置公共頭部header,下面小編通過實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • vue3.0引入百度地圖并標(biāo)記點(diǎn)的實(shí)現(xiàn)代碼

    vue3.0引入百度地圖并標(biāo)記點(diǎn)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue3.0引入百度地圖并標(biāo)記點(diǎn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • vue3+ts使用APlayer的示例代碼

    vue3+ts使用APlayer的示例代碼

    這篇文章主要介紹了vue3+ts使用APlayer的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Vue插槽slot詳細(xì)介紹(對(duì)比版本變化,避免踩坑)

    Vue插槽slot詳細(xì)介紹(對(duì)比版本變化,避免踩坑)

    Vue中的Slot對(duì)于編寫可復(fù)用可擴(kuò)展的組件是再合適不過了,下面這篇文章主要給大家介紹了關(guān)于Vue插槽slot詳細(xì)介紹的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目

    如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目

    這篇文章主要介紹了如何使用Webstorm和Chrome來調(diào)試Vue項(xiàng)目,對(duì)Vue感興趣的同學(xué),一定要看一下
    2021-05-05
  • 基于 Vue 的樹形選擇組件的示例代碼

    基于 Vue 的樹形選擇組件的示例代碼

    本篇文章主要介紹了基于 Vue 的樹形選擇組件的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Vue 簡單實(shí)現(xiàn)前端權(quán)限控制的示例

    Vue 簡單實(shí)現(xiàn)前端權(quán)限控制的示例

    這篇文章主要介紹了Vue 簡單實(shí)現(xiàn)前端權(quán)限控制的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • vue項(xiàng)目中實(shí)現(xiàn)的微信分享功能示例

    vue項(xiàng)目中實(shí)現(xiàn)的微信分享功能示例

    這篇文章主要介紹了vue項(xiàng)目中實(shí)現(xiàn)的微信分享功能,結(jié)合實(shí)例形式分析了基于vue.js實(shí)現(xiàn)的微信分享功能具體定義與使用方法,需要的朋友可以參考下
    2019-01-01
  • 解決vue中修改了數(shù)據(jù)但視圖無法更新的情況

    解決vue中修改了數(shù)據(jù)但視圖無法更新的情況

    今天小編就為大家分享一篇解決vue中修改了數(shù)據(jù)但視圖無法更新的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue.js實(shí)現(xiàn)時(shí)間軸功能

    Vue.js實(shí)現(xiàn)時(shí)間軸功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)時(shí)間軸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論