您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“vue如何實現全局組件注冊”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“vue如何實現全局組件注冊”這篇文章吧。
全局組件注冊
1 一般情況
需要使用組件的場景:
<template> <BaseInput v-model="searchText" @keydown.enter="search"/> <BaseButton @click="search"> <BaseIcon name="search"/> </BaseButton> </template> <script> import BaseButton from './baseButton' import BaseIcon from './baseIcon' import BaseInput from './baseInput' export default { components: { BaseButton, BaseIcon, BaseInput } } </script>
我們寫了一堆基礎UI組件,然后每次我們需要使用這些組件的時候,都得先import,然后聲明components,很繁瑣,這里可以使用統一注冊的形式
2 優化
我們需要借助一下神器webpack,使用 require.context() 方法來創建自己的 模塊 上下文,從而實現自動動態require組件。這個方法需要3個參數:要搜索的文件夾目錄、是否還應該搜索它的子目錄、以及一個匹配文件的正則表達式。 我們在components文件夾添加一個叫componentRegister.js的文件,在這個文件里借助webpack動態將需要的基礎組件統統打包進來。 /src/components/componentRegister.js
import Vue from 'vue' /** * 首字母大寫 * @param str 字符串 * @example heheHaha * @return {string} HeheHaha */ function capitalizeFirstLetter(str) { return str.charAt(0).toUpperCase() + str.slice(1) } /** * 對符合'xx/xx.vue'組件格式的組件取組件名 * @param str fileName * @example abc/bcd/def/basicTable.vue * @return {string} BasicTable */ function validateFileName(str) { return /^\S+\.vue$/.test(str) && str.replace(/^\S+\/(\w+)\.vue$/, (rs, $1) => capitalizeFirstLetter($1)) } const requireComponent = require.context('./', true, /\.vue$/) // 找到組件文件夾下以.vue命名的文件,如果文件名為index,那么取組件中的name作為注冊的組件名 requireComponent.keys().forEach(filePath => { const componentConfig = requireComponent(filePath) const fileName = validateFileName(filePath) const componentName = fileName.toLowerCase() === 'index' ? capitalizeFirstLetter(componentConfig.default.name) : fileName Vue.component(componentName, componentConfig.default || componentConfig) })
這里文件夾結構:
components │ componentRegister.js ├─BasicTable │ BasicTable.vue ├─MultiCondition │ index.vue
這里對組件名做了判斷,如果是index的話就取組件中的name屬性處理后作為注冊組件名,所以最后注冊的組件為: multi-condition 、 basic-table 最后我們在main.js中import 'components/componentRegister.js',然后我們就可以隨時隨地使用這些基礎組件,無需手動引入了~
以上是“vue如何實現全局組件注冊”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。