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

news2024/9/20 22:26:42

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 10/11 系统优化工具 Optimizer 16.7

Optimizer 功能特色 全语言支持&#xff08;提供19种语言&#xff09; 提高系统和网络性能 禁用不必要的窗口服务 禁用 Windows 遥测、小娜等 禁用 Office 遥测&#xff08;仅适用于 Office 2016&#xff09; 禁用 Windows 10 自动更新 一次快速下载有用的应用程序 卸载 UWP 应…

ARMxy工业控制器搭载 Mini PCIe加密安全芯片工业控制拓展之旅

在当今高度数字化和智能化的工业领域&#xff0c;数据采集的准确性、实时性和全面性对于优化生产流程、提高产品质量以及保障生产安全至关重要。ARM 工业控制器以其高效能、低功耗和出色的稳定性&#xff0c;成为了工业自动化领域的重要组成部分。而其中的 Mini PCIe 接口更是为…

JVM内存结构、内存参数、调优原理

文章目录 引言I JVM基础知识1.1 JVM内存区域1.2 JVM 堆内存布局1.3 JVM 内存参数II 调整JVM的默认堆内存配置2.1 java命令启动jar包时配置JVM 的内存参数2.2 基于Tomcat服务器部署的java应用,配置JVM 的内存参数III JVM调优基本概念: 应用程序的响应时间(RT)和吞吐量(QPS)…

基于springboot+vue+uniapp的使命召唤游戏助手小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Lenze伦茨E82ZAFSC / E82ZAFSC001变频器IO模块手测

Lenze伦茨E82ZAFSC / E82ZAFSC001变频器IO模块手测

easyExcel 单元格合并

需求 现在有一张员工表&#xff0c;需要将员工信息导出为excel&#xff0c;同一个部门放在一起&#xff0c;同一个工资段放在一起。 case 员工表 package com.tx.test.testeasyexcel.excel;import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.anno…

人工智能开发实战TensorFlow机器学习框架解析

内容导读 TensorFlow概述 TensorFlow环境搭建 TensorFlow计算机加速 一、TensorFlow概述 1、TensorFlow简介 ‌‌TensorFlow是由‌Google开发的用于‌机器学习和人工智能的开源软件库&#xff0c;特别适用于‌深度神经网络的训练和推理。‌ 它是一个基于‌数据流图的符号…

08 - debugfs

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 0. 什么是 debugfs1. debugfs 配置编译和注册运行2. 第一个 debugfs 编程示例3. 通过 debugfs 导出整型数据4. 通过 debugfs 导出 16 进制数据5. 通过 debugfs 到处数组6. 通过 debugfs 导出…

【SQL】换座位

目录 题目 分析 代码 题目 表: Seat ---------------------- | Column Name | Type | ---------------------- | id | int | | student | varchar | ---------------------- id 是该表的主键&#xff08;唯一值&#xff09;列。 该表的每一行都表示学…

ComfyUI SDXL Prompt Styler 简介

SDXL Prompt Styler 来自于 comfyui-art-venture 节点 style 已经更新 旧版本的 sai-line art 变更为 line art log_prompt 已经更新 旧版本的 false 变更为 Yes 或 No style_name 已经更新 旧版本的 true &#xff08;不再适用&#xff09;&#xff08;可以尝试对应style中…

【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch12 随机森林(Random Forest)

系列文章目录 监督学习&#xff1a;参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归&#xff08;SAheart.csv&#xff09; 【学习笔记】 陈强-机器学习-Python-…

dht11 + Sc32440驱动

一、DHT11概述 1、简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器&#xff0c;它应用专用的数字模块采集技术和温湿度传感技术&#xff0c;确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件&#xff…

【专题】2024年中国AI人工智能基础数据服务研究报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37516 随着人工智能技术的迅猛发展&#xff0c;AI 基础数据服务行业迎来了前所未有的发展机遇。报告合集显示&#xff0c;2023 年中国 AI 基础数据服务市场规模达到 45 亿元&#xff0c;且未来五年复合增长率有望达到 30.4%。多模态大…

如何在不同设备上检查IP 地址?

IP 地址&#xff08;Internet 协议地址&#xff09;是网络上设备的唯一标识符。了解如何查找 IP 地址对于解决网络问题、设置网络设备和维护网络安全非常重要。本文将详细介绍如何在不同设备上检查 IP 地址&#xff0c;包括 Windows 计算机、Mac 计算机、智能手机&#xff08;A…

【Material-UI】Rating组件:如何使用Basic Rating实现多种评分方式

文章目录 一、Rating 组件概述1. 组件介绍2. Basic rating 的核心功能 二、Basic rating 的详细使用方法1. 受控组件&#xff08;Controlled&#xff09;2. 只读模式&#xff08;Read-only&#xff09;3. 禁用状态&#xff08;Disabled&#xff09;4. 无评分状态&#xff08;No…

嵌入式笔试准备

文件组合 将传输文件切分成多个部分&#xff0c;按照原排列顺序&#xff0c;每部分文件编号为一个正整数。 class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> res;int sum 0;for(int i1; i<targe…

VS2017+QT不能正常添加资源文件

is not in a subdirectory of the resource file.You now have the option to copy this file to a valid location. . 该错误原因是项目路径英文导致的&#xff0c;换成全中文路径就没问题了 具体步骤&#xff1a; 双击qrc文件&#xff0c;先添加前缀&#xff0c;然后添加图片…

机器学习之监督学习(一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 机器学习之监督学习&#xff08;一&#xff09; 1.监督学习定义2.监督学习分类2.1回归 regression2.2 分类 classification 3.线性回归 linear regression3.1 单特征线性回归…

Android 突破边界:解密google Partner机制获取Resource

在 Android 应用开发中&#xff0c;除了可以查找系统中的特定 APK 并获取其信息外&#xff0c;还可以通过 Partner 机制获取 Partner APK 的资源文件&#xff0c;同时这种机制也是一种跨进程的通信方式。本文将进一步探讨这些内容。 1.Partner apk注册特定的action广播 /** M…

Windows上编译GTest并执行测试用例

目录 0 背景1 环境2 生成GTest动态库2.1 下载最新GTest库2.2 编译GTest2.2.1 cmake gtest2.2.1.1 遇到问题&#xff1a;target参数不对2.2.1.2 遇到问题&#xff1a;xxx thread 编译报错 2.2.2 用VS2015编译依赖库 3 依赖库部署3.1 遇到问题 4 编写测试用例5 效果展示 0 背景 …