当前位置: 首页 > news >正文

Vue3中组件的挂载及调用

在Vue2.X中,我们通过Vue.prototype.$dialog = dialog的方式挂载组件,
并使用this.$xxx的形式通过函数调用组件,如this.$dialog({})

而在Vue3.X中,组合式API没有this,不过新增了globalProperties属性,代替了Vue.prototype

查看Vue3.X官方文档(https://www.vue3js.cn/docs/zh/api/application-config.html#globalproperties)

// 之前(Vue 2.x)
Vue.prototype.$http = () => {}

// 之后(Vue 3.x)
const app = Vue.createApp({})
app.config.globalProperties.$http = () => {}

下面我们通过一个示例看看Vue3中如何实现组件的挂载及调用:

此处,我们在myDialog上增加install属性,并进行全局注册与挂载,再将其暴露出去

// dialog.js
myDialog.install = app => {
	// 全局注册
	app.component('myDialog', dialogConstructor)
	// 两种全局挂载方法
	app.config.globalProperties.$dialog = myDialog
	// app.provide('myDialog', myDialog)
}

export default myDialog

全局引入

在main.js中,我们将其导入,并通过app.use(),系统会自动调用其install方法

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import myDialog from './packages/dialog/index.js'
const app = createApp(App)
// 此处注意app.mount需要放置最后,否则app.use无法执行
app.use(myDialog)
app.mount('#app')

在需要调用的vue文件中,我们通过 getCurrentInstance 获取ctx,getCurrentInstance 能帮助我们获取实例上下文,此处相当于Vue2.X中的this

// 需要调用组件的vue文件
import { getCurrentInstance } from 'vue'
setup() {
	const {ctx } = getCurrentInstance();
	ctx.$dialog({
		id:'my-dialog',
		title: "提示",
		content: "恭喜获得XXX代金券"
	})
	......
}

注意:ctx用于生产模式进行调试,打包后可能出现问题,此处建议改为proxy,即

// 需要调用组件的vue文件
import { getCurrentInstance } from 'vue'
setup() {
	const {proxy } = getCurrentInstance();
	proxy.$dialog({
		id:'my-dialog',
		title: "提示",
		content: "恭喜获得XXX代金券"
	})
	......
}

此外,我们还可以使用第二种方式 Provide / Inject
点击查看(https://www.vue3js.cn/docs/zh/api/application-api.html#provide)

import { inject } from 'vue';
setup() {
	const myDialog = inject('myDialog')
	myDialog({
		id:'my-dialog',
		title: "提示",
		content: "恭喜获得XXX代金券"
	})
}

局部引入

若只想在局部组件中调用,我们也可以使用标签或函数两种调用模式,据实际需求使用

标签调用:

<Dialog title="hello" @click="test" :visible="true" @ok-btn-click="test" :closeOnClickModal="false" content="Trist"></Dialog>

<script>
import Dialog from './packages/dialog/index.js'
export default {
	components: {
		Dialog 
	}
}
</script>

//或者	setup语法糖可省略大量代码
<script setup>
import Dialog from './packages/dialog/index.js'
</script>

函数调用:

import Dialog from './packages/dialog/index.js'
export default {
	setup() {
		Dialog({
			id:'my-dialog',
			title: "提示",
			content: "恭喜获得XXX代金券"
		})
	}
}
</script>

//或者	setup语法糖可省略大量代码
<script setup>
import Dialog from './packages/dialog/index.js'
Dialog({
	id:'my-dialog',
	title: "提示",
	content: "恭喜获得XXX代金券"
})
</script>

相关文章:

  • HDFS 核心原理
  • 正则表达式学习1
  • 第一章:TypeScript
  • 进制准换 base_convert()
  • yii框架rules规则
  • PWA桌面应用开发
  • php面试题 汇集2
  • 从底层了解Vue3
  • 六大设计原则(读书笔记)
  • BZOJ1588 营业额统计 (Splay)
  • 小团队的PM和开发方法
  • 第二个商业设想
  • 如何让.net 2003中的Panel正常实现Dock
  • innodb引擎redo文件维护
  • 清理
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【面试系列】之二:关于js原型
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Babel配置的不完全指南
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ES10 特性的完整指南
  • Hibernate最全面试题
  • iOS 系统授权开发
  • MD5加密原理解析及OC版原理实现
  • 服务器从安装到部署全过程(二)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 使用Swoole加速Laravel(正式环境中)
  • 数组的操作
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序button引导用户授权
  • MPAndroidChart 教程:Y轴 YAxis
  • ​ssh免密码登录设置及问题总结
  • # 数据结构
  • #1014 : Trie树
  • (1)Android开发优化---------UI优化
  • (1)bark-ml
  • (7)STL算法之交换赋值
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (力扣)循环队列的实现与详解(C语言)
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (译) 函数式 JS #1:简介
  • (转)四层和七层负载均衡的区别
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *p++,*(p++),*++p,(*p)++区别?
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .java 9 找不到符号_java找不到符号
  • .libPaths()设置包加载目录
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET MVC 验证码
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .Net 高效开发之不可错过的实用工具