Vue封裝的組件全局注冊并引用
當vue接觸的多了之后,你可能也會到自己封裝組件的程度,試想每個頁面的功能級模塊全部拆分成組件,然后后續(xù)請求后臺數(shù)據(jù)傳入進去或者自己模擬數(shù)據(jù),是多么方便的一件事情。
每當我們需要修改的時候,只需維護那一個功能性組件即可,不需要這個功能了,只需要從頁面中刪除這個組件的引用即可。
那么廢話不多說了,我們來看看如何全局注冊并一鍵引入(類似于element ui的全部引入)。
如何封裝組件就不多贅述了。
參考vue官網(wǎng)的做法:vue官網(wǎng)全局注冊
1、正則判斷路徑以及文件名,獲取全部組件并全局注冊(可以直接在main.js里寫,但是為了規(guī)范以及后期可維護性,我們新建個單獨的的js文件寫入)
(1)main.js引入所有自定義封裝的組件
import Vue from 'vue'; import echarts from 'echarts'; import App from './App.vue'; import router from './router'; import store from './store'; import './plugins/element'; // 引入時間戳序列化 import './plugins/dateFormat'; // 引入公共樣式 import Public from './assets/css/public.css'; // 引入所有自定義封裝的組件 import './components/CommonCommponts/GlobalComponents'; import startup from './startup'; // 使用公共樣式 Vue.use(Public); Vue.config.productionTip = false; Vue.prototype.$echarts = echarts; function vue() { new Vue({ router, store, render: h => h(App) }).$mount('#app'); } startup(vue, router);
(2)全局組件的GlobalComponents.js
這里需要安裝2個插件upperFirst和camelCase
下面是組件相對于這個文件的路徑,因為我的封裝組件和這個js文件在同一級,所以直接 . 就可以了。
然后是是否查詢子目錄,即這個路徑下你又新建了文件夾,把各個組件區(qū)分開,那么就會嵌套很多層,查詢子目錄可以方便的使我們找到它們。
然后是正則表達式,因為我的所有組件名都是Rdapp開頭的,這里看大家的文件命名,不需要的話刪除前面的Rdapp即可。
然后下面的部分就可以不用動了。
import Vue from 'vue'; import upperFirst from 'lodash/upperFirst'; import camelCase from 'lodash/camelCase'; const requireComponent = require.context( // 其組件目錄的相對路徑 '.', // 是否查詢其子目錄 true, // 匹配基礎組件文件名的正則表達式 /Rdapp[A-Z]\w+\.(vue|js)$/, ); requireComponent.keys().forEach((fileName) => { // 獲取組件配置 const componentConfig = requireComponent(fileName); // 獲取組件的 PascalCase 命名 const componentName = upperFirst( camelCase( // 獲取和目錄深度無關的文件名 fileName .split('/') .pop() .replace(/\.\w+$/, ''), ), ); // 全局注冊組件 Vue.component( componentName, // 如果這個組件選項是通過 `export default` 導出的, // 那么就會優(yōu)先使用 `.default`, // 否則回退到使用模塊的根。 componentConfig.default || componentConfig, ); });
2、組件封裝以及命名
這里新建了一個文件夾,其中js文件是上面的配置文件,用于全局注冊并引用的,然后下面是封裝的組件,請使用駝峰命名法。
3、組件引入
組件引入使用 - 語法,以每個駝峰為標記,例如AccBdd的命名,引入就是<acc-bdd></acc-bdd>即可
<template> <div class="ER-left-box"> <rdapp-animation-group animationType="leftToRight"> <!-- 標題一 --> <rdapp-animation-item speed="fast"> <rdapp-title :textStyle="leftData.LeftTitle1" class="header-title" ></rdapp-title> </rdapp-animation-item> <!-- 火災警告 --> <rdapp-animation-item speed="slow"> <rdapp-early-warning :textStyle="HandleEventInfo"></rdapp-early-warning> </rdapp-animation-item> <!-- 標題二 --> <rdapp-animation-item speed="fast"> <rdapp-title :textStyle="leftData.LeftTitle2" class="header-title" ></rdapp-title> </rdapp-animation-item> <!-- 描述 --> <rdapp-animation-item speed="normal"> <rdapp-describe :textStyle="{ description: HandleEventInfo.description }" ></rdapp-describe> </rdapp-animation-item> <!-- 視頻 --> <rdapp-animation-item speed="slow"> <rdapp-video ref="video" :cameraNum="0"></rdapp-video> </rdapp-animation-item> </rdapp-animation-group> </div> </template>
這樣我們就完成了組件的封裝以及所有組件的全局注冊和使用,便于我們的開發(fā)以及后期可維護性。
這里附帶一個組件的封裝寫法:
這里封裝的是一個標題的組件,為了方便用戶傳參,使用了對象作為參數(shù),通過計算屬性以及Object.assign方法,可以更方便的合并用戶傳遞的參數(shù),即如果用戶只在對象中傳入了text屬性,那么其他屬性就會使用默認值,這樣無疑提高了組件的豐富性。
<template> <div class="BgTitle-box" :style="getStyle"> {{getStyle.text}} </div> </template> <script> export default { name: 'RdappBgTitle', props: { textStyle: Object, }, computed: { getStyle() { return Object.assign({ text: '基本信息', width: '300px', height: '54px', lineHeight: '54px', textAlign: 'center', fontSize: '16px', fontColor: '#fff', }, this.textStyle); }, }, }; </script> <style scoped> .BgTitle-box{ background: url("../../static/img/PreliminaryJudge/assess.png") no-repeat center center; } </style>
好了,以上就是組件封裝以及全局注冊引用的方法,希望對你有幫助。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
vue中如何給el-table-column添加指定列的點擊事件
elementui中提供了點擊行處理事件,下面這篇文章主要給大家介紹了關于vue中如何給el-table-column添加指定列的點擊事件,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-11-11vue實現(xiàn)動態(tài)表格提交參數(shù)動態(tài)生成控件的操作
這篇文章主要介紹了vue實現(xiàn)動態(tài)表格提交參數(shù)動態(tài)生成控件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue3中使用pnpm搭建monorepo開發(fā)環(huán)境
這篇文章主要為大家介紹了Vue3中使用pnpm搭建monorepo開發(fā)環(huán)境示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08vue實現(xiàn)動態(tài)監(jiān)測元素高度
這篇文章主要介紹了vue實現(xiàn)動態(tài)監(jiān)測元素高度方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10