vue2中使用tinymce

vue2中使用tinymce的记录

本篇文章主要实现的功能:
(1)【查看】时禁用编辑
(2)【编辑】时某些内容是不可编辑的
(3)【内容】前端拼接编辑器模板
(4)【内容】编辑器模板中table样式修改

实现效果图:
在这里插入图片描述

第一个功能的主要代码

disabled属性

 // 使用地地方,传递disabled属性<HTinyEditorref="HTinyEditor":value="editHtml":disabled="isReadonly"></HTinyEditor>     // 组件接受,并赋给【`disabled`】属性<Editor v-model="myValue" :init="init" :api-key="apiKey" :disabled="disabled" />

第二个功能的主要代码

(1)contenteditable=“false” 禁止编辑
(2)监听删除操作,对有data-protected属性和data-mce-bogus属性的内容不可删除

// 下面为测试数据
<p contenteditable="false" data-protected="protected" style="text-align: center; line-height: 1;"><span style="font-size: 12pt;">通告内容预览</span></p>
<p style="text-align: center; line-height: 1;"><span style="font-family: 隶书; font-size: 24pt;"><strong><span data-edit="edit" style="color: #e03e2d;">XX通告</span></strong></span></p>// 组件中的方法
setup: (editor) => {// 限制有data-protected和data-mce-bogus属性的内容不可删除(应用场景:某些属性是固定不可编辑的)editor.on("keydown", (e) => {if (e.keyCode === 46 || e.keyCode === 8) {const node = editor.selection.getNode();if (node && (node.getAttribute("data-protected") || node.getAttribute("data-mce-bogus"))) {e.preventDefault();}}});},

使用步骤

下载依赖

npm install tinymce@5.10.3 -S

npm install @tinymce/tinymce-vue@3.0.1 -S

public文件夹下需要的依赖包文件与语言包

执行完上面的两条命令后,在node_modules 中找到 tinymce文件夹,将tinymce目录中的skins文件夹复制到public文件夹下,其他可按需引入。需要汉化的可以在官网下载语言包(汉化包地址),下载完成后将解压后的文件夹存放在与skins文件夹相同的位置。(我这里在最外层包裹了tinymce这一层文件夹方便查找,可不包)
在这里插入图片描述

HTinyEditor组件封装
<template><div class="tinymce-editor"><!-- :api-key="apiKey" --><Editor v-model="myValue"  :init="init" :disabled="disabled" /><!-- <button @click="onClick()">测试</button> --></div>
</template><script>
import tinymce from "tinymce/tinymce";
import Editor from "@tinymce/tinymce-vue";// import 'tinymce/themes/modern/theme'
import "tinymce/themes/silver/theme";
import "tinymce/icons/default/icons";
import "tinymce/plugins/image"; // 插入上传图片插件
import "tinymce/plugins/media"; // 插入视频插件
import "tinymce/plugins/table"; // 插入表格插件
import "tinymce/plugins/link"; // 超链接插件
import "tinymce/plugins/code"; // 代码块插件
import "tinymce/plugins/lists"; // 列表插件
import "tinymce/plugins/contextmenu"; // 右键菜单插件
import "tinymce/plugins/wordcount"; // 字数统计插件
import "tinymce/plugins/colorpicker"; // 选择颜色插件
import "tinymce/plugins/textcolor"; // 文本颜色插件
import "tinymce/plugins/fullscreen"; // 全屏
// import 'tinymce/plugins/help' // 帮助
import "tinymce/plugins/charmap";import "tinymce/plugins/print"; // 打印
import "tinymce/plugins/preview"; // 预览
import "tinymce/plugins/hr"; // 水平线import "tinymce/plugins/spellchecker";
import "tinymce/plugins/imagetools";
import "tinymce/plugins/noneditable";
// import 'tinymce/plugins/save'
// import 'tinymce/plugins/tabfocus'
// import 'tinymce/plugins/textpattern'
// import 'tinymce/plugins/template'import "tinymce/icons/default/icons";
import "tinymce/plugins/advlist"; //高级列表
import "tinymce/plugins/anchor"; //锚点
import "tinymce/plugins/autolink"; //自动链接
import "tinymce/plugins/autoresize"; //编辑器高度自适应,注:plugins里引入此插件时,Init里设置的height将失效
import "tinymce/plugins/autosave"; //自动存稿
import "tinymce/plugins/charmap"; //特殊字符
import "tinymce/plugins/code"; //编辑源码
import "tinymce/plugins/codesample"; //代码示例
import "tinymce/plugins/directionality"; //文字方向
import "tinymce/plugins/emoticons"; //表情
import "tinymce/plugins/fullpage"; //文档属性
// import "tinymce/plugins/fullscreen"; //全屏
import "tinymce/plugins/help"; //帮助
// import 'tinymce/plugins/hr' //水平分割线
import "tinymce/plugins/importcss"; //引入css
import "tinymce/plugins/insertdatetime"; //插入日期时间
// import 'tinymce/plugins/link' //超链接
// import 'tinymce/plugins/lists' //列表插件
// import 'tinymce/plugins/media' //插入编辑媒体
// import 'tinymce/plugins/image' // 插入图片
import "tinymce/plugins/nonbreaking"; //插入不间断空格
import "tinymce/plugins/pagebreak"; //插入分页符
import "tinymce/plugins/paste"; //粘贴插件
// import 'tinymce/plugins/preview' //预览
// import 'tinymce/plugins/print' //打印
import "tinymce/plugins/quickbars"; //快速工具栏
import "tinymce/plugins/save"; //保存
import "tinymce/plugins/searchreplace"; //查找替换
// import 'tinymce/plugins/spellchecker'  //拼写检查,未加入汉化,不建议使用
import "tinymce/plugins/tabfocus"; //切入切出,按tab键切出编辑器,切入页面其他输入框中
// import 'tinymce/plugins/table' //表格
import "tinymce/plugins/template"; //内容模板
// import 'tinymce/plugins/textcolor' //文字颜色
import "tinymce/plugins/textpattern"; //快速排版
import "tinymce/plugins/toc"; //目录生成器
import "tinymce/plugins/visualblocks"; //显示元素范围
import "tinymce/plugins/visualchars"; //显示不可见字符
// import 'tinymce/plugins/wordcount' //字数统计export default {name: "HTinyEditor",components: {Editor,},props: {// 传入的编辑器中的内容,使组件支持v-model绑定value: {type: String,default: "",},// 是否禁用disabled: {type: Boolean,default: false,},plugins: {type: [String, Array],default:"lists image media table textcolor wordcount contextmenu preview",},toolbar: {type: [String, Array],default:"undo redo |  formatselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat table| fontsizeselect | fontselect'",},},data() {return {apiKey: "jzlds2e6urz6akm9wxp4f70mnwg83d8fovsialqazxowyity",// 配置文件服务器的静态访问路径前缀// static_web_preurl: 'http://localhost/files/hxzy_img/',// 初始化配置init: {placeholder: "在这里输入文字",language_url: "/tinymce/langs/zh_CN.js", // plugin文件夹下的汉化路径language: "zh_CN",skin_url: "/tinymce/skins/ui/oxide",height: 600, // 编辑器高度,可以考虑获取窗口高度,以适配不同设备屏幕end_container_on_empty_block: true,powerpaste_word_import: "clean",advlist_bullet_styles: "square",advlist_number_styles: "default",imagetools_cors_hosts: ["www.tinymce.com", "codepen.io"],default_link_target: "_blank",link_title: false,media_live_embeds: true,content_style: "img {max-width:100%;} html{background-color: #fff;}", // 直接自定义可编辑区域的css样式images_upload_url: "/api/attch/upload",nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin// plugins: this.plugins,// toolbar: this.toolbar,// @ts-nocheckplugins: 'link lists image code table colorpicker textcolor wordcount contextmenu',plugins:"advlist anchor autolink autosave code codesample colorpicker  contextmenu directionality toc  fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount",// toolbar:'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat | table',toolbar: ["searchreplace bold italic underline strikethrough fontselect fontsizeselect  alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample","hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen",],fontsize_formats: "8pt 10pt 12pt 14pt 18pt 24pt 36pt", // 第二步font_formats:"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings",branding: false,elementpath: false, //隐藏底栏的元素路径// inline: true, //开启内联模式// icons: 'custom',readonly: true,menubar: true, // `是否显示菜单栏(文件、编辑等菜单)`file_picker_types: "media",setup: (editor) => {// 限制有data-protected和data-mce-bogus属性的内容不可删除(应用场景:某些属性是固定不可编辑的)editor.on("keydown", (e) => {if (e.keyCode === 46 || e.keyCode === 8) {const node = editor.selection.getNode();if (node &&(node.getAttribute("data-protected") ||node.getAttribute("data-mce-bogus"))) {e.preventDefault();}}});},},myValue: this.value,};},watch: {value(newValue) {this.myValue = newValue;},myValue(newValue) {this.$emit("input", newValue);},},mounted() {tinymce.init({});},methods: {onClick() {let editContent = tinymce.editors[0].getContent();this.$emit("onClick", editContent);console.log("编辑器中的内容:", editContent);},// 可以添加一些自己的自定义事件,如清空内容clear() {this.myValue = "";},},
};
</script>
<style scoped>
.tinymce-editor {min-height: 100%;
}
</style>
使用组件
<template><div><PopToggle :title="title" :visible="visible" @close="onClose"><template #content v-if="visible"><HTinyEditorref="HTinyEditor":value="editHtml":disabled="isReadonly"></HTinyEditor></template><template #footer><div class="bg-white text-right project-popup-bottom"><a-button @click="onClose">取消</a-button><a-buttontype="primary"v-if="!isReadonly"@click="confirm"class="m-l-10">确定</a-button></div></template></PopToggle></div>
</template><script>
import PopToggle from "@com/business/PopToggle"; //弹窗组件
import HTinyEditor from "@/components/business/HTinyEditor";export default {data() {return {editHtml: "", //编辑器中的内容};},props: {visible: {type: Boolean,required: true,},title: {type: String,required: true,},id: String,},components: {PopToggle,HTinyEditor,},computed: {// 操作状态operateState() {return this.title.includes("编辑");},// 只读状态isReadonly() {return this.title.includes("详情");},},watch: {visible(val) {if (val) {}},},methods: {// 取消onClose() {this.$emit("toggleVisible");},// 确定confirm() {// 获取富文本数据console.log(this.$refs.HTinyEditor.myValue);},},
};
</script><style lang="less" scoped></style>
模板中数据动态拼接
  1. 拼接模板数据共用方法
/**** @param {Sting} sysHtml 要拼接的数据1* @param {Sting} quantityHtml 要拼接的数据2* @param {Object} data 内容字段数据* @returns*/
export function editContent(sysHtml, quantityHtml, data) {let content = `<p style="text-align: center; line-height: 1;" contenteditable="false" data-protected="protected">&nbsp;</p><p style="text-align: center; line-height: 1;"><span style="font-size: 18pt;">通告内容预览</span></p><p style="text-align: center; line-height: 1;">&nbsp;</p><p style="text-align: center; line-height: 1;"><span style="font-family: 楷体; font-size: 36pt;"><strong><span style="color: #e03e2d;">XX通告</span></strong></span></p><p style="text-align: center; line-height: 1;" contenteditable="false" data-protected="protected"><span style="text-decoration: underline;"><span style="font-size: 24pt; color: #e03e2d; text-decoration: underline;"><span style="color: #000000; font-size: 10pt; text-decoration: underline;">&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 14pt;"> XXX部门&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XXX编号 </span>&nbsp; &nbsp; &nbsp;&nbsp;</span></span></span></p><p style="text-align: center; line-height: 1;">&nbsp;</p><p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #e03e2d;"><span style="font-size: 10pt;">${data.orgName}<span style="color: #000000;"></span></span></span></p><p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #e03e2d;"><span style="font-size: 10pt;">你好,XXX:</span></span></p><p style="text-align: left; line-height: 1; padding-left: 40px;" contenteditable="false" data-protected="protected"><span style="font-size: 24pt; color: #000000;"><span style="font-size: 10pt;">(1)XX数据</span></span></p><table style="border-collapse: collapse; width: 99.9552%;" border="1" contenteditable="false" data-protected="protected"><tbody><tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);"><td style="width: 12.1856%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 11.8782%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 11.1064%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 12.3404%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 10.9521%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 13.4202%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 16.9681%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 10.9521%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td></tr>`;content += sysHtml;content += `</tbody></table><p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span style="font-size: 24pt; color: #000000;"><span style="font-size: 10pt;">(2)XX数据</span></span></p><table style="border-collapse: collapse; width: 99.9552%;" border="1"><tbody><tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);"><td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 12.5506%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 10.8249%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 11.6093%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 16.0033%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td><td style="width: 11.2943%; height: 32.1429px; text-align: center;"><strong><span style="color: #ffffff;">XXX</span></strong></td></tr>`;content += quantityHtml;content += `</tbody></table><p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span class="mce-nbsp-wrap"  >&nbsp;&nbsp;&nbsp;</span></p><p style="text-align: left; line-height: 1; padding-left: 40px;"  ><span style="font-size: 12pt; color: #e03e2d;">XXX</span></p><p style="line-height: 1; text-align: right;"><span style="color: #e03e2d;">${data.orgName}&nbsp; &nbsp; &nbsp;</span></p><p style="line-height: 1; text-align: right;">&nbsp; &nbsp; <span style="color: #e03e2d;">${data.issueTime}&nbsp; &nbsp; &nbsp;</span></p>`;return content;
}
  1. 调用模板
this.editHtml = editContent(sysHtml, quantityHtml, otherData);

注意:编辑器模板中不要给table加高度,否则会导致table没有数据时表头会很高

  1. 模板中table表头样式修改
  • 实现效果
    在这里插入图片描述

  • 编辑器模板中table代码

<tbody><tr style="height: 32.1429px; background-color: rgba(24, 144, 255, 1);">...</tr>
</tbody>

也可使用其他富文本编辑器,像vueup/vue-quill等

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

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

相关文章

泛微开发修炼之旅--06自定义Action接口开发示例、源码及使用场景

文章链接&#xff1a;泛微开发修炼之旅--06自定义Action接口开发示例、源码及使用场景

杨校老师项目之SpringBoot整合Vue超市管理系统

1.获取代码&#xff1a; 有偿获取&#xff1a;mryang511688 2.技术栈 SpringBoot MySQL mybatis Plus Redis 摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;超市进销存系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff…

qlv文件怎么转换成mp4,qlv文件转换成mp4文件的工具软件

qlv转MP4的方法&#xff0c;一直是广大视频爱好者关注的问题。qlv是一种较为特殊的视频格式&#xff0c;而MP4则以其广泛的兼容性和优秀的播放效果&#xff0c;成为众多设备上的首选格式。因此&#xff0c;掌握qlv转MP4的技巧&#xff0c;对于提升视频观看体验至关重要。本文将…

pytorch(其他操作)

文章目录 1.torch.atleast_1d()2.torch.atleast_2d()3.torch.bincount()4.torch.block_diag()5.torch.broadcast_tensors()6.torch.broadcast_shapes()7.torch.bucketize()8.torch.cartesian_prod()9.torch.cdist()10.torch.clone()11.torch.cummax()12.torch.cummin()13.torch…

队列及其应用

实验内容 请设计一个简单的模拟银行排队系统&#xff0c;要求程序具有以下4项菜单&#xff1a; 1.取号。选择该菜单后&#xff0c;为客户产生一个排队号。 2.叫号。选择该菜单后&#xff0c;显示可服务的客户排队号。 3.查看队伍。从队首到队尾列出所有排队客户的排队号。 4.退…

【机器学习】YOLOv10与YOLOv8分析

YOLOv10与YOLOv8&#xff1a;实时目标检测技术的演进与对比 一、YOLOv8与YOLOv10的概述二、YOLOv8的特点与优势三、YOLOv10的改进与创新四、YOLOv10与YOLOv8的性能对比五、总结与展望 随着深度学习技术的飞速发展&#xff0c;实时目标检测技术已成为计算机视觉领域的研究热点。…

关于yolov8识别滑块关键点

1&#xff0c;images,annotations创建 IMAGES&#xff1a;放图片材料的 ANNTATIONS&#xff1a;放labelImg标记的xml文件 2&#xff0c;labels,txt怎么来的 labels &#xff1a;可以手动创建&#xff0c;里面还配置了train,val,test文件夹。可手动&#xff08;以下代码中没有写…

【渗透测试】DC-1靶机实战(下)SSH爆破提权

【渗透测试】DC-1靶机实战&#xff08;上&#xff09;漏洞扫描获取反弹shell-CSDN博客 7.SSH爆破 hydra ssh://172.20.10.4 -l flag4 -P /usr/share/john/password.lst -t 64 -f -vV -o /tmp/hydra.sshssh://10.10.10.31&#xff1a;指定了要攻击的 SSH 服务的地址。 -l flag…

医学编码系统说明

简介 流程说明 登录系统 在浏览器中访问FNEHR的站点&#xff0c;输入医院编号、用户和密码&#xff0c;选择“Other”&#xff0c;点击“Login”按钮&#xff0c;登录系统&#xff1a; 登录后&#xff0c;在左边显示系统的菜单&#xff1a; 系统设置 医院设置 点击左侧的“Acc…

【电赛】STM32-PID直流减速电机小车【寻迹+避障+跟随】【更新ing】

一.需求分析 1.主控&#xff1a;STM32C8T6&#xff08;没什么好说的哈哈&#xff09; 2.电机&#xff1a;JAG25-370电机 【问】为什么要用直流减速电机&#xff1f;&#xff1f; PID控制器需要依靠精确的反馈信号来调整其输出&#xff0c;确保电机按照预定的速度和位置运行…

用python写一个基于PyQt5和OpenAI的智能问答项目

摘要&#xff1a; 使用python写一个可以对话的智能问答机器人&#xff0c;界面是使用PyQt5写的&#xff0c;通过调用OpenAl的免费接口&#xff0c;实现实时聊天功能。 1.申请免费的API key 前往页面https://github.com/chatanywhere/GPT_API_free 点击下面链接&#xff1a; …

SQL实验 SQL Server数据库的安全性控制

一、实验目的 1&#xff0e;熟悉通过SQL对数据进行安全控制。 2&#xff0e;掌握GRANT与REVOKE语句的使用&#xff0c;熟悉数据库用户的创建和授权。 二、实验内容 &#xff08;一&#xff09;、第一部分&#xff1a;以上先采用图形用户界面进行设置权限&#xff0c;然后试…

65、API攻防——接口安全WebPackRESTSOAPWSDLWebService

文章目录 一、接口类型二、Webservice类——Wsdl&ReadyAPI-SQL注入三、SOAP类——Swagger&SoapUI&EXP-信息泄露四、HTTP类——WebPack&PackerFuzzer-信息泄露 一、接口类型 HTTP类接口PRC类接口 客户端和服务端的连接&#xff0c;非web上的接口&#xff0c;可…

计算机网络9——无线网络和移动网络1 无线局域网 WLAN2

文章目录 一、802.11局域网的 MAC 层协议1、CSMA/CA协议2、时间间隔 DIFS 的重要性3、争用信道的过程4、对信道进行预约 二、802.11局域网的 MAC 帧1&#xff09;关于 802.11 数据帧的地址2&#xff09;序号控制字段、持续期字段和帧控制字段 一、802.11局域网的 MAC 层协议 1…

实战:Zig 编写高性能 Web 服务(2)

1.1 编写 HTTP server 我们从python -m http.server 8000启动得到灵感&#xff0c;先确定好目标&#xff1a; 编写一个HTTP/1.1 http serverzig version 0.12.0 使用zig init搭建项目的前置工作你先自行搭建好&#xff0c;不会的翻看前面铺垫的章节熟悉zig的项目结构。 关键…

神经网络 | 深度学习背后的数学

神经网分析 机器学习处理的是数据&#xff0c;通过学习输入的数据&#xff0c;从而建立模型&#xff0c;以便预测新的数据的输出 按照类型可以进行如下分类 监督分类 非监督分类 强化学习 神经元 生物学中&#xff0c;人的大脑是由多个神经元互相连接形成网络而构成的。也…

2024国内热门大语言模型在科研方面的应用

本博客总结了几款热门的国产大语言模型&#xff0c;帮助大家利用这些大语言模型更好的进行科研。 模型介绍 1.文心一言 链接:https://yiyan.baidu.com/ 开发方&#xff1a;百度 特点&#xff1a;专注于中文语言理解与生成&#xff0c;适合中文文本的语义理解任务。 百度推出…

设计模式-抽象工厂(创建型)

创建型-抽象工厂 角色 抽象工厂&#xff1a; 声明创建一个族产品对象的方法&#xff0c;每个方法对应一中产品&#xff0c;抽象工厂可以是接口&#xff0c;也可以是抽象类&#xff1b;具体工厂&#xff1a; 实现抽象工厂接口&#xff0c;复杂创建具体的一族产品&#xff1b;抽…

web学习笔记(六十三)

目录 1.钩子函数onActivated和onDeactivated 1.1 onActivated 1.2 onDeactivated 2. KeepAlive补充 2.1 include 和 exclude 2.2 的作用是什么? 2.3 组件包含什么prop属性及作用&#xff1f; 2.4 对应那两个生命周期&#xff1f;生命周期什么时机执行&#xff1f; 2.5 …

前端 Web 与原生应用端 WebView 通信交互 - HarmonyOS Next

基于鸿蒙 HarmonyOS Next 与前端 Vue 通信交互相关小结; DevEco Studio NEXT Developer Preview2 Vue js 两端相互拟定好协议后,通过前端页面的点击事件,将所需的数据传输给原生移动端组件方法中,处理后将消息回传至前端. 根据官方文档的案例尝试,但没成功 ... 后经过几经尝试…