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

vue-manage-system升級(jí)到vue3的開發(fā)總結(jié)分析

 更新時(shí)間:2022年09月27日 08:36:04   作者:小黃鴨來了  
這篇文章主要為大家介紹了vue-manage-system升級(jí)到vue3的開發(fā)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

近期抽了點(diǎn)時(shí)間,對(duì) vue-manage-system 這個(gè)項(xiàng)目進(jìn)行了升級(jí),從 vue2 升級(jí)到 vue3、 elementplus、vite、pinia、typescript。這也是對(duì)此次升級(jí)做了一些細(xì)節(jié)方面的總結(jié)吧。

按需導(dǎo)入

Elment plus 功能較多,但是在項(xiàng)目中并用不到這么多,此時(shí)需要按需導(dǎo)入,安裝 unplugin-vue-components 和 unplugin-auto-import這兩款插件,在 vite.config.ts 中配置插件

插件會(huì)自動(dòng)導(dǎo)入 element plus,因此在 main.ts 中不再需要手動(dòng)導(dǎo)入,否則插件的按需導(dǎo)入將不生效。

// import ElementPlus from 'element-plus';
// import 'element-plus/dist/index.css';
// app.use(ElementPlus);

組件的 name 選項(xiàng)

在項(xiàng)目中通過 <KeepAlive> 內(nèi)置組件的 include prop 來緩存組件實(shí)例,它會(huì)根據(jù)組件的 name 選項(xiàng)進(jìn)行匹配,因此必須顯式聲明一個(gè) name 選項(xiàng)。在 vue2 中使用選項(xiàng)式api開發(fā)時(shí)可以很簡(jiǎn)單的設(shè)置 name 選項(xiàng),在 vue3 中使用組合式api,便不能同選項(xiàng)式api一樣了。在 3.2.34 或以上的版本中,使用 <script setup> 的單文件組件會(huì)自動(dòng)根據(jù)文件名生成對(duì)應(yīng)的 name 選項(xiàng),無需再手動(dòng)聲明。不過我們想要自定義組件 name ,可以使用 vite-plugin-vue-setup-extend 插件。在 vite.config.ts 中加上配置

import VueSetupExtend from 'vite-plugin-vue-setup-extend';
export default defineConfig({
  plugins: [
    // ...
    VueSetupExtend()
  ],
})

便可在 vue 單文件中定義 name 選項(xiàng)了

<script setup lang="ts" name="table">
...
</script>

pinia

在項(xiàng)目中用 pinia 來替代 vuex,它也是一個(gè)跨組件/頁面共享狀態(tài)的存儲(chǔ)庫,與 Vuex 相比,不再需要 mutations,使用起來更加方便。

// sidebar.ts
import { defineStore } from 'pinia';
export const useSidebarStore = defineStore('sidebar', {
	state: () => {
		return {
			// 控制側(cè)邊欄的折疊
			collapse: false
		};
	},
	actions: {
		handleCollapse() {
			this.collapse = !this.collapse;
		}
	}
});
// header.vue
import { useSidebarStore } from '../store/sidebar';
const sidebar = useSidebarStore();
// 側(cè)邊欄折疊
const collapseChage = () => {
	sidebar.handleCollapse();
};

權(quán)限管理

在項(xiàng)目中,不同的角色對(duì)應(yīng)不同的權(quán)限,低權(quán)限的角色,無法進(jìn)入高權(quán)限的頁面,通過vue自定義指令來實(shí)現(xiàn)入口的隱藏。 使用pinia來管理當(dāng)前用戶的權(quán)限,并在頁面刷新時(shí)從本地存儲(chǔ)中獲得,以免刷新后數(shù)據(jù)丟失

// permiss.ts
import { defineStore } from 'pinia';
interface ObjectList {
	[key: string]: string[];
}
export const usePermissStore = defineStore('permiss', {
	state: () => {
		const keys = localStorage.getItem('ms_keys');
		return {
			key: keys ? JSON.parse(keys) : <string[]>[],
			defaultList: <ObjectList>{
				admin: ['1', '2', '3', '4', '5],
				user: ['1', '2']
			}
		};
	},
	actions: {
		handleSet(val: string[]) {
			this.key = val;
		}
	}
});

在用戶登錄之后,根據(jù)用戶角色來獲取對(duì)應(yīng)權(quán)限(此處為本地示例項(xiàng)目,權(quán)限未從服務(wù)器獲?。?/p>

// login.vue
const permiss = usePermissStore();
const submitForm = (formEl: FormInstance | undefined) =&gt; {
	// ....
	const keys = permiss.defaultList[param.username == 'admin' ? 'admin' : 'user'];
	permiss.handleSet(keys);
	localStorage.setItem('ms_keys', JSON.stringify(keys));
};

在自定義指令中,對(duì)不在權(quán)限中的節(jié)點(diǎn)進(jìn)行隱藏,在CSS中設(shè)置帶hidden屬性的display為none即可簡(jiǎn)單實(shí)現(xiàn)

// main.ts
const permiss = usePermissStore();
app.directive('permiss', {
	mounted(el, binding) {
		if (!permiss.key.includes(String(binding.value))) {
			el['hidden'] = true;
		}
	}
});

在側(cè)邊導(dǎo)航元素加上 v-premiss="xx" 即可實(shí)現(xiàn)不同權(quán)限的顯示與隱藏。

Typescript

原先自己對(duì)Typescript也沒有多大的興趣,在自己項(xiàng)目中使用了之后,逐漸有了興趣,發(fā)現(xiàn)還挺好用的,類型推斷,自動(dòng)提示,錯(cuò)誤提示等都挺不錯(cuò)的。不過自己用的也是比較簡(jiǎn)單,還需要再深入學(xué)習(xí)。

總結(jié)

由于該項(xiàng)目中不包含任何業(yè)務(wù)代碼,所以還是相對(duì)比較簡(jiǎn)單的,不過從開發(fā)中還是積累了一些經(jīng)驗(yàn),在其它項(xiàng)目中可以更加熟練地開發(fā)。自己在維護(hù)項(xiàng)目的同時(shí),有認(rèn)真的想過了,每個(gè)產(chǎn)品都要有自己的定位,而我對(duì)這個(gè)產(chǎn)品的定位就是要足夠簡(jiǎn)單,又能滿足管理后臺(tái)快速開發(fā)的需求,以便外包項(xiàng)目快速完成,因此我不需要太多花里胡哨的功能,而且還削減了部分功能,比如i18n國際化。如果有什么好的建議,可以開 issue 一起討論。項(xiàng)目地址:vue-manage-system

以上就是vue-manage-system升級(jí)到vue3的開發(fā)總結(jié)分析的詳細(xì)內(nèi)容,更多關(guān)于vue-manage-system升級(jí)vue3的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析Vue.js中v-bind v-model的使用和區(qū)別

    淺析Vue.js中v-bind v-model的使用和區(qū)別

    v-model 指令在表單控件元素上創(chuàng)建雙向數(shù)據(jù)綁定,所謂雙向綁定。這篇文章主要介紹了Vue.js中v-bind v-model的使用和區(qū)別,需要的朋友可以參考下
    2018-12-12
  • Vue3+element實(shí)現(xiàn)表格數(shù)據(jù)導(dǎo)出

    Vue3+element實(shí)現(xiàn)表格數(shù)據(jù)導(dǎo)出

    這篇文章主要為大家學(xué)習(xí)介紹了Vue3如何利用element實(shí)現(xiàn)表格數(shù)據(jù)導(dǎo)出功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-07-07
  • 1分鐘Vue實(shí)現(xiàn)右鍵菜單

    1分鐘Vue實(shí)現(xiàn)右鍵菜單

    今天給大家分享的是,如何在最短的時(shí)候內(nèi)實(shí)現(xiàn)右鍵菜單。高效實(shí)現(xiàn)需求,避免重復(fù)造輪子。感興趣的可以了解一下
    2021-10-10
  • vue長按事件和點(diǎn)擊事件沖突的解決

    vue長按事件和點(diǎn)擊事件沖突的解決

    這篇文章主要介紹了vue長按事件和點(diǎn)擊事件沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 解決elementUI 切換tab后 el_table 固定列下方多了一條線問題

    解決elementUI 切換tab后 el_table 固定列下方多了一條線問題

    這篇文章主要介紹了解決elementUI 切換tab后 el_table 固定列下方多了一條線問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3中的Fragment使用方法詳解

    Vue3中的Fragment使用方法詳解

    Fragment 是 Vue 3 中的新特性,允許一個(gè)組件模板返回多個(gè)根節(jié)點(diǎn),與傳統(tǒng)方式不同,不再需要一個(gè)額外的 DOM 元素來包裹所有內(nèi)容,本文將詳細(xì)介紹 Fragment 的概念、使用場(chǎng)景、優(yōu)點(diǎn)以及可能遇到的問題,需要的朋友可以參考下
    2024-08-08
  • Vue使用electron轉(zhuǎn)換項(xiàng)目成桌面應(yīng)用方法介紹

    Vue使用electron轉(zhuǎn)換項(xiàng)目成桌面應(yīng)用方法介紹

    Electron也可以快速地將你的網(wǎng)站打包成一個(gè)原生應(yīng)用發(fā)布,下面這篇文章主要給大家介紹了關(guān)于Vue和React中快速使用Electron的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Vue組件之間傳值/調(diào)用幾種方式

    Vue組件之間傳值/調(diào)用幾種方式

    這篇文章主要介紹了Vue組件之間傳值/調(diào)用的幾種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Vue.js中數(shù)組變動(dòng)的檢測(cè)詳解

    Vue.js中數(shù)組變動(dòng)的檢測(cè)詳解

    這篇文章給大家主要介紹了Vue.js中數(shù)組變動(dòng)的檢測(cè),文中給出了詳細(xì)的示例代碼和過程介紹,相信會(huì)對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • 如何使用vite搭建vue3項(xiàng)目詳解

    如何使用vite搭建vue3項(xiàng)目詳解

    Vite 是一個(gè)面向現(xiàn)代瀏覽器的更輕,更快的web應(yīng)用開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于如何使用vite搭建vue3項(xiàng)目的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論