最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

近期抽了點時間,對 vue-manage-system 這個項目進行了升級,從 vue2 升級到 vue3、 elementplus、vite、pinia、typescript。這也是對此次升級做了一些細節(jié)方面的總結吧。

按需導入

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

插件會自動導入 element plus,因此在 main.ts 中不再需要手動導入,否則插件的按需導入將不生效。

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

組件的 name 選項

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

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

便可在 vue 單文件中定義 name 選項了

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

pinia

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

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

權限管理

在項目中,不同的角色對應不同的權限,低權限的角色,無法進入高權限的頁面,通過vue自定義指令來實現入口的隱藏。 使用pinia來管理當前用戶的權限,并在頁面刷新時從本地存儲中獲得,以免刷新后數據丟失

// 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;
		}
	}
});

在用戶登錄之后,根據用戶角色來獲取對應權限(此處為本地示例項目,權限未從服務器獲?。?/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));
};

在自定義指令中,對不在權限中的節(jié)點進行隱藏,在CSS中設置帶hidden屬性的display為none即可簡單實現

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

在側邊導航元素加上 v-premiss="xx" 即可實現不同權限的顯示與隱藏。

Typescript

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

總結

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

以上就是vue-manage-system升級到vue3的開發(fā)總結分析的詳細內容,更多關于vue-manage-system升級vue3的資料請關注腳本之家其它相關文章!

相關文章

  • VUE3引入html文件并傳值方法舉例

    VUE3引入html文件并傳值方法舉例

    這篇文章主要給大家介紹了關于VUE3引入html文件并傳值的相關資料,這是最近在項目中遇到了的一個需求,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • vue項目創(chuàng)建并引入餓了么elementUI組件的步驟

    vue項目創(chuàng)建并引入餓了么elementUI組件的步驟

    這篇文章主要介紹了vue項目創(chuàng)建并引入餓了么elementUI組件的步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 從Vue轉換看Webpack與Vite 代碼轉換機制差異詳解

    從Vue轉換看Webpack與Vite 代碼轉換機制差異詳解

    這篇文章主要為大家介紹了從Vue轉換看Webpack與Vite代碼轉換機制差異詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 解決echarts echarts數據動態(tài)更新和dataZoom被重置問題

    解決echarts echarts數據動態(tài)更新和dataZoom被重置問題

    這篇文章主要介紹了解決echarts echarts數據動態(tài)更新和dataZoom被重置問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue2文件流下載成功后文件格式錯誤、打不開及內容缺失的解決方法

    vue2文件流下載成功后文件格式錯誤、打不開及內容缺失的解決方法

    使用Vue時我們前端如何處理后端返回的文件流,下面這篇文章主要給大家介紹了關于vue2文件流下載成功后文件格式錯誤、打不開及內容缺失的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Vue3中事件總線mitt的使用方式

    Vue3中事件總線mitt的使用方式

    mitt又稱事務總線,是第三方插件,這篇文章主要為大家詳細介紹了Vue3中事件總線mitt的使用方式,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • vue3.2中的vuex使用詳解

    vue3.2中的vuex使用詳解

    這篇文章主要介紹了vue3.2中的vuex使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue項目啟動如何設置默認啟動頁

    vue項目啟動如何設置默認啟動頁

    這篇文章主要介紹了vue項目啟動如何設置默認啟動頁問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue 組件化基本使用詳情

    Vue 組件化基本使用詳情

    這篇文章主要給大家分享的是Vue 組件化基本使用,所謂組件化,就是把頁面拆分成多個組件,每個組件依賴的 CSS、JS、模板、圖片等資源放在一起開發(fā)和維護。 因為組件是資源獨立的,所以組件在系統(tǒng)內部可復用,組件和組件之間可以嵌套,下面來看文章學習內容吧
    2021-10-10
  • Vue 實現顯示/隱藏層的思路(加全局點擊事件)

    Vue 實現顯示/隱藏層的思路(加全局點擊事件)

    這篇文章主要介紹了Vue 實現顯示/隱藏層的思路(加全局點擊事件),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論

松潘县| 措美县| 台东县| 且末县| 衡阳县| 兴国县| 梓潼县| 泽库县| 柏乡县| 十堰市| 彭阳县| 闸北区| 海阳市| 武乡县| 九龙城区| 剑阁县| 滕州市| 阳泉市| 霍城县| 铁岭县| 盐源县| 苗栗县| 芦溪县| 朝阳区| 崇左市| 涿鹿县| 汤原县| 西贡区| 耒阳市| 青阳县| 甘孜县| 通化县| 乐业县| 山阴县| 渑池县| 安多县| 龙泉市| 将乐县| 渝中区| 武功县| 高台县|