vue组件如何挂载到全局?Vue组件挂载到全局的方法介绍(代码)
这篇文章给大家介绍的内容是关于vue组件如何挂载到全局?Vue组件挂载到全局的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在最近的项目中,使用了bootstrap-vue来开发,然而在实际的开发过程中却发现这个UI提供的组件并不能打到我们预期的效果,像alert、modal等组件每个页面引入就得重复引入,并不像element那样可以通过this.$xxx来调用,那么问题来了,如何通过this.$xxx来调用起我们定义的组件或对我们所使用的UI框架的组件呢。
以bootstrap-vue中的Alert组件为例,分一下几步进行:
1、定义一个vue文件实现对原组件的再次封装
main.vue
<template> <b-alert class="alert-wrap pt-4 pb-4" :show="isAutoClose" :variant="type" dismissible :fade="true" @dismiss-count-down="countDownChanged" @dismissed="dismiss" > {{msg}} </b-alert> </template> <script> export default { /** * 参考: https://bootstrap-vue.js.org/docs/components/alert * @param {string|number} msg 弹框内容 * @param {tstring} type 弹出框类型 对应bootstrap-vue中variant 可选值有:'primary'、'secondary'、'success'、'danger'、'warning'、'info'、'light'、'dark'默认值为 'info' * @param {boolean} autoClose 是否自动关闭弹出框 * @param {number} duration 弹出框存在时间(单位:秒) * @param {function} closed 弹出框关闭,手动及自动关闭都会触发 */ props: { msg: { type: [String, Number], default: '' }, type: { type: String, default: 'info' }, autoClose: { type: Boolean, default: true }, duration: { type: Number, default: 3 }, closed: { type: Function, default: null } }, methods: { dismiss () { this.duration = 0 }, countDownChanged (duration) { this.duration = duration } }, computed: { isAutoClose () { if (this.autoClose) { return this.duration } else { return true } } }, watch: { duration () { if (this.duration === 0) { if (this.closed) this.closed() } } } } </script> <style scoped> .alert-wrap { position: fixed; width: 600px; top: 80px; left: 50%; margin-left: -200px; z-index: 2000; font-size: 1.5rem; } </style>
这里主要就是对组件参数、回调事件的一些处理,与其他处理组件的情况没有什么区别
2、定义一个js文件挂载到Vue上,并和我们定义的组件进行交互
index.js
import Alert from './main.vue' import Vue from 'vue' let AlertConstructor = Vue.extend(Alert) let instance let seed = 1 let index = 2000 const install = () => { Object.defineProperty(Vue.prototype, '$alert', { get () { let id = 'message_' + seed++ const alertMsg = options => { instance = new AlertConstructor({ propsData: options }) index++ instance.id = id instance.vm = instance.$mount() document.body.appendChild(instance.vm.$el) instance.vm.$el.style.zIndex = index return instance.vm } return alertMsg } }) } export default install
其主要思想是通过调用这个方法给组件传值,然后append到body下
3、最后需要在main.js中use一下
import Alert from '@/components/alert/index' Vue.use(Alert)
4、使用
this.$alert({msg: '欢迎━(*`∀´*)ノ亻!'})
5、confrim的封装也是一样的
main.vue
<template> <b-modal v-if="!destroy" v-model="isShow" title="温馨提示" @change="modalChange" @show="modalShow" @shown="modalShown" @hide="modalHide" @hidden="modalHidden" @ok="modalOk" @cancel="modalCancel" :centered="true" :hide-header-close="hideHeaderClose" :no-close-on-backdrop="noCloseOnBackdrop" :no-close-on-esc="noCloseOnEsc" :cancel-title="cancelTitle" :ok-title="okTitle"> <p class="my-4">{{msg}}</p> </b-modal> </template> <script> export default { /** * 参考: https://bootstrap-vue.js.org/docs/components/modal * @param {boolean} isShow 是否显示modal框 * @param {string|number} msg 展示内容 * @param {boolean} hideHeaderClose 是否展示右上角关闭按钮 默认展示 * @param {string} cancelTitle 取消按钮文字 * @param {string} okTitle 确定按钮文字 * @param {boolean} noCloseOnBackdrop 能否通过点击外部区域关闭弹框 * @param {boolean} noCloseOnEsc 能否通过键盘Esc按键关闭弹框 * @param {function} change 事件触发顺序: show -> change -> shown -> cancel | ok -> hide -> change -> hidden * @param {function} show before modal is shown * @param {function} shown modal is shown * @param {function} hide before modal has hidden * @param {function} hidden after modal is hidden * @param {function} ok 点击'确定'按钮 * @param {function} cancel 点击'取消'按钮 * @param {Boolean} destroy 组件是否销毁 在官方并没有找到手动销毁组件的方法,只能通过v-if来实现 */ props: { isShow: { type: Boolean, default: true }, msg: { type: [String, Number], default: '' }, hideHeaderClose: { type: Boolean, default: false }, cancelTitle: { type: String, default: '取消' }, okTitle: { type: String, default: '确定' }, noCloseOnBackdrop: { type: Boolean, default: true }, noCloseOnEsc: { type: Boolean, default: true }, change: { type: Function, default: null }, show: { type: Function, default: null }, shown: { type: Function, default: null }, hide: { type: Function, default: null }, hidden: { type: Function, default: null }, ok: { type: Function, default: null }, cancel: { type: Function, default: null }, destroy: { type: Boolean, default: false } }, methods: { modalChange () { if (this.change) this.change() }, modalShow () { if (this.show) this.show() }, modalShown () { if (this.shown) this.shown() }, modalHide () { if (this.hide) this.hide() }, modalHidden () { if (this.hidden) this.hidden() this.destroy = true }, modalOk () { if (this.ok) this.ok() }, modalCancel () { if (this.cancel) this.cancel() } } } </script>
index.js
import Confirm from './main.vue' import Vue from 'vue' let ConfirmConstructor = Vue.extend(Confirm) let instance let seed = 1 let index = 1000 const install = () => { Object.defineProperty(Vue.prototype, '$confirm', { get () { let id = 'message_' + seed++ const confirmMsg = options => { instance = new ConfirmConstructor({ propsData: options }) index++ instance.id = id instance.vm = instance.$mount() document.body.appendChild(instance.vm.$el) instance.vm.$el.style.zIndex = index return instance.vm } return confirmMsg } }) } export default install
相关文章推荐:
以上是vue组件如何挂载到全局?Vue组件挂载到全局的方法介绍(代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

JavaScript是一种广泛应用于Web开发的编程语言,而WebSocket则是一种用于实时通信的网络协议。结合二者的强大功能,我们可以打造一个高效的实时图像处理系统。本文将介绍如何利用JavaScript和WebSocket来实现这个系统,并提供具体的代码示例。首先,我们需要明确实时图像处理系统的需求和目标。假设我们有一个摄像头设备,可以采集实时的图像数
