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

MyPrint打印设计器(四)vue3 函数式调用组件

vue3 函数式调用组件

vue中,通常情况下调用一个组件需要以下步骤

  • 导入组件
  • template引入组件,并且设置ref属性
  • 在js模块定义对应的ref属性
  • 通过ref对象调用对应的方法

如果这个组件在template是不必要的,那么可以通过函数式调用组件,
来省略在template标签中引入组件,来简化调用步骤,做到可以通过纯js调用组件

这种方法也有一定的缺陷,因为在初始化的时候就已经确定了组件的DOM所在的层级,所以无法灵活的控制DOM元素的层级,
所有一般在Message这种不关心组件DOM层级的组件中使用,以下是使用示例,结尾有实战项目中的使用示例

在这里插入图片描述

组件代码

<!--MessageBox.vue-->
<script setup lang="ts">import {ref} from "vue";interface Message {msg: string}defineExpose({success, clear});const messageContentList = ref<Message[]>([]);function success(msg: string) {messageContentList.value.push({msg})}function clear() {messageContentList.value.length = 0}</script><template><div class="msg_wrapper"><div v-for="(item) in messageContentList"><div class="msg_body"><span class="msg_content">{{ item.msg }}</span></div></div></div>
</template><style scoped>.msg_wrapper {position: fixed;width: 100%;top: 0;left: 0;right: 0;z-index: 100000;pointer-events: none;text-align: center;}.msg_body {display: inline-flex;padding: 10px 20px;margin-top: 5px;background: gray;border-radius: 5px;}
</style>

渲染安装组件

// install.ts
import {App, h, render, VNode} from 'vue';
import MessageBox from './MessageBox.vue';let messageBoxNode: VNode = null!;
let successMsgHandle: (msg: string) => void;
let clearHandle: () => void;export function mountMessageBox(app: App<any>) {if (!messageBoxNode) {messageBoxNode = h(MessageBox, {});const container = document.createElement('div');messageBoxNode.appContext = app._context;render(messageBoxNode, container);successMsgHandle = messageBoxNode.component!.exposed!.success;clearHandle = messageBoxNode.component!.exposed!.clear;document.body.appendChild(container.firstElementChild!);}
}export function success(msg: string) {successMsgHandle(msg)
}export function clearMsg() {clearHandle()
}

使用

1、main.js中安装

// main.js
import {createApp} from 'vue'
import './style.css'
import App from './App.vue'
import {mountMessageBox} from "./components/install.ts";const app = createApp(App);
mountMessageBox(app)
app.mount('#app')

2、代码中使用


<script setup lang="ts">import {ref} from "vue";import {success, clearMsg} from "./components/install.ts";const input = ref('MyPrint打印设计器,函数式调用组件实例!')function showMsg() {success(input.value)}function clickClearMsg() {clearMsg()}
</script><template><input v-model="input" type="text"><button @click="showMsg">发送</button><button @click="clickClearMsg">清空</button>
</template>

代码仓库

代码仓库:github

代码仓库:gitee

实战项目:MyPrint 可视化打印设计器

操作简单,组件丰富的一站式打印解决方案打印设计器

体验地址:前往

代码仓库:github

代码仓库:gitee

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python办公自动化:使用`Python-PPTX`创建和保存演示文稿
  • 常用的虚拟机连接工具(远程访问工具)
  • JVM中篇:字节码与类的加载篇-01-class文件结构
  • Android中apk安装过程源码解析
  • 以小搏大:Salesforce 十亿参数模型表现超过ChatGPT
  • 计算机的内存不足
  • 北峰370MHz应急窄带无线通信解决方案
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • 酒店智能触摸开关的原理与应用
  • Linux 系统调优 2
  • 【PyTorch][chapter 27][李宏毅深度学习][transformer-1]
  • Qt与Python
  • 反爬虫策略收录集
  • android交叉编译报错no input files的解决方法
  • 视觉检索(以图搜图)技术分享
  • [case10]使用RSQL实现端到端的动态查询
  • [NodeJS] 关于Buffer
  • ES学习笔记(12)--Symbol
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js作用域和this的理解
  • Laravel5.4 Queues队列学习
  • nodejs:开发并发布一个nodejs包
  • OSS Web直传 (文件图片)
  • PAT A1017 优先队列
  • Python十分钟制作属于你自己的个性logo
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue实战(四)登录/注册页的实现
  • 阿里云Kubernetes容器服务上体验Knative
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 解决iview多表头动态更改列元素发生的错误
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)21
  • 利用jquery编写加法运算验证码
  • 设计模式 开闭原则
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 微信小程序实战练习(仿五洲到家微信版)
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #{}和${}的区别?
  • (1)bark-ml
  • (2)空速传感器
  • (C++哈希表01)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (译) 函数式 JS #1:简介
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **《Linux/Unix系统编程手册》读书笔记24章**