电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Vue 實現創建全局組件,并且使用Vue.use() 載入方式

瀏覽:126日期:2022-12-10 15:45:31

自定義vue組件,一般是局部引用的方式載入,使用的時候,在應用的組件中使用 import moduleName from ‘module’ 導入,在components中注冊

<template> <div class='app-NewsInfo'> <h3>{{info.title}}</h3> <!-- 新聞評論子組件。 --> <comment :id='id'></comment> </div></template><script>import comment from '../sub/comment.vue';export default { data() { return { info: {}, id: this.$route.query.id }; }, methods: {}, components: { comment },</script>

那么如果某個組件經常復用,豈不是每次在新組建中引用都要導入一次嗎?是的 。這種情況下可以將組件封裝成全局組件,一次導入之后,全局都可以使用。 雖然這種做法不太常見,但是這里還是將其整理出來。

1.首先創建一個文件夾loading

用來保存需要全局引用的組件,并且存放一些配置文件。

Vue 實現創建全局組件,并且使用Vue.use() 載入方式

2.創建一個loading.vue的組件。

該組件中除了組件的基礎結構,并無其他內容。它的作用是用來加載準備自定義的組件,最后將loading組件加載到全局的Vue中,這樣就一次性完成了所有自定義組件的加載,非常方便。

<template> <div class='loading'></div></template><script>export default { data() { return {}; }, methods: {}};</script><style scoped></style>

3.創建自定義組件

這里以一個簡單封裝的mint-ui輪播圖為例。

<template> <div class='app-turns'> <mt-swipe :auto='4000'> <mt-swipe-item v-for='(item,i) of list' :key='i'> <img :src='http://www.hdgsjgj.cn/bcjs/item.img_url' @click='detail' :data-id='item.id'> </mt-swipe-item> </mt-swipe> </div></template><script>export default { name: 'navbar', props: ['list'], //接收父組件數據 data() { return { }; }, methods: { detail(e) { var id = e.target.dataset.id; var url = `/GoodsInfo/${id}`; this.$router.push(url); } }, created() {}};</script><style scoped>.mint-swipe { height: 150px;}.mint-swipe img { width: 100%;}</style>

4.創建index.js,用來導出所有自定義組件。

import turns from ’./turns.vue’const loading = { install: function (Vue) { Vue.component(’turns’, turns) }}export default loading;

其實到這里組件封裝就結束了,下面再演示下如何使用。

5.在main.js中,導入并使用loading組件。

import loading from ’./lib/loading’;

Vue.use(loading);

這樣就將組件全局引用成功了!

6.在需要使用的地方,直接使用組件名即可。

<template> <div class='app-home'> <turns :list='list'></turns> </div></template>

通過這種方式,就能實現組件的全局引用。

這種做的好處是對于復用性非常高的組件,省去了每次導入的麻煩;

缺點是無法直觀的看到組件引入和注冊,對于不清楚的人來說看不懂組件名的意義。

其實官方文檔中已經提到了一種解決方案:

https://cn.vuejs.org/v2/guide/components-registration.html#基礎組件的自動化全局注冊

基礎組件的自動化全局注冊

可能你的許多組件只是包裹了一個輸入框或按鈕之類的元素,是相對通用的。我們有時候會把它們稱為基礎組件,它們會在各個組件中被頻繁的用到。

所以會導致很多組件里都會有一個包含基礎組件的長列表:

import BaseButton from ‘./BaseButton.vue’ import BaseIcon from‘./BaseIcon.vue’ import BaseInput from ‘./BaseInput.vue’export default { components: {BaseButton,BaseIcon,BaseInput } }

而只是用于模板中的一小部分:

<BaseInput v-model=“searchText” @keydown.enter=“search” />

<BaseButton @click=“search”>

幸好如果你使用了 webpack (或在內部使用了 webpack 的 Vue CLI 3+),那么就可以使用 require.context 只全局注冊這些非常通用的基礎組件。這里有一份可以讓你在應用入口文件 (比如 src/main.js) 中全局導入基礎組件的示例代碼:

import Vue from ‘vue’ import upperFirst from ‘lodash/upperFirst’import camelCase from ‘lodash/camelCase’const requireComponent = require.context( // 其組件目錄的相對路徑‘./components’, // 是否查詢其子目錄 false, // 匹配基礎組件文件名的正則表達式/Base[A-Z]w+.(vue|js)$/ )requireComponent.keys().forEach(fileName => { // 獲取組件配置 constcomponentConfig = requireComponent(fileName)// 獲取組件的 PascalCase 命名 const componentName = upperFirst(camelCase(// 剝去文件名開頭的 ./ 和結尾的擴展名fileName.replace(/^./(.*).w+$/, ‘$1’)) )// 全局注冊組件 Vue.component(componentName,// 如果這個組件選項是通過 export default 導出的,// 那么就會優先使用 .default,// 否則回退到使用模塊的根。componentConfig.default || componentConfig ) })

補充知識:vue組件注冊 Vue.extend Vue.component Vue.use的使用 以及組件嵌套

我就廢話不多說了,大家還是直接看代碼吧~

/** * vue.extend用法 * 使用基礎 Vue 構造器,創建一個“子類”。參數是一個包含組件選項的對象。 * 注意:此實例可以掛載到根實例之外 */ const Profile = Vue.extend({ template: ’<p>{{firstName}} {{lastName}} aka {{alias}}</p>’, data: function () { return { firstName: ’Walter’, lastName: ’White’, alias: ’Heisenberg’ } } }) // 創建 Profile 實例,并掛載到一個元素上。 new Profile().$mount(’#opp’)let navbar = { template: `<div class=’nav’> <input type='text' placeholder='請輸入關鍵字'/> </div>`, data:()=>{ return { } }, mounted() { console.log(this.$parent) }};const MyPlugin = { install:(vue, arguments)=>{ console.log(arguments); vue.component(’navbar’, navbar); }}Vue.use(MyPlugin, {a:1, b:2}); // 組件注冊成功// logo組件Vue.component('logo', { template: `<div class=’logo’> <img v-bind:src='http://www.hdgsjgj.cn/bcjs/logoSrc'> </div>`, inject: [’logoSrc’], data:()=>{ return { } }, mounted() { console.log(this.$parent) }})// header組件 組件調用 provie inject傳值Vue.component('buttoncounter', { template: `<div class=’header’> <logo></logo> {{header}} </div>`, provide:{ logoSrc:’https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582433251882&di=de459decf2e157552b97a4879ae4135d&imgtype=0&src=http%3A%2F%2Fwww.suntop168.com%2Fblog%2Fzb_users%2Fupload%2F2014%2F2%2Fadf89182.jpg’ }, data:()=>{ return { header:’我是頭部導航欄’ } }, mounted() { console.log(this.$parent) }});// vue根實例let vm = new Vue({ el:'#app', data:{ name: ’Marry’ }, mounted(){ console.log(’vue根實例初始化完畢’) }})console.log(vm);

以上這篇Vue 實現創建全局組件,并且使用Vue.use() 載入方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
主站蜘蛛池模板: 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 嘉兴泰东园林景观工程有限公司_花箱护栏| 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 建大仁科-温湿度变送器|温湿度传感器|温湿度记录仪_厂家_价格-山东仁科 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折! | PO膜_灌浆膜及地膜供应厂家 - 青州市鲁谊塑料厂 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 山东艾德实业有限公司 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 |