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

vue3使用summernote

一、安装

npm install summernote-vue jquery summernote bootstrap @popperjs/core

二、summernoteEditor.vue

<template><div ref="editorRef"></div>
</template><script setup>
import {ref, onMounted, onBeforeUnmount, watch} from 'vue';
import $ from 'jquery';  // 直接导入 jQuery 并设置全局变量
window.$ = window.jQuery = $;// 使用 ES6 导入替代 require
import 'bootstrap/dist/css/bootstrap.min.css';
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
import 'summernote/dist/summernote.min.css';
import 'summernote/dist/summernote.min.js';
import 'summernote/dist/lang/summernote-zh-CN.js';const props = defineProps({modelValue: {type: String,default: ''}
});const emit = defineEmits(['update:modelValue', 'init', 'change']);
const editorRef = ref(null);
let summernoteInstance = null;
const { proxy } = getCurrentInstance();
onMounted(() => {// 合并默认配置和用户配置const mergedOptions = {lang: 'zh-CN',height: 800,fontNames: [//字体类型配置'宋体', '微软雅黑', '楷体', '黑体', '隶书', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New','Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande','Tahoma', 'Times New Roman', 'Verdana'],fontNamesIgnoreCheck: [//字体类型配置'宋体', '微软雅黑', '楷体', '黑体', '隶书', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New','Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande','Tahoma', 'Times New Roman', 'Verdana'],fontSize: ['8', '9', '10', '11', '12', '14', '16', '18', '24', '36', '48', '60', '72', '90'],toolbar: [// 字体样式['style', ['bold', 'italic', 'underline', 'clear']],// 字体类型['font', ['fontname']],// 字体大小['fontsize', ['fontsize']],// 字体颜色['color', ['color']],// 列表['para', ['ul', 'ol', 'paragraph']],// 表格['table', ['table']],// 插入['insert', ['link', 'picture', 'video']],// 视图['view', ['fullscreen', 'codeview', 'help']]],callbacks: {onChange: (contents) => {emit('update:modelValue', contents);emit('change', contents);},onImageUpload: (files) => {uploadImage(files[0]);}},placeholder: '请输入内容...'};// 初始化编辑器summernoteInstance = $(editorRef.value).summernote(mergedOptions);// 设置初始内容if (props.modelValue) {summernoteInstance.summernote('code', props.modelValue);}emit('init', summernoteInstance);
});// 监听外部内容变化并更新编辑器
watch(() => props.modelValue, (newValue) => {if (summernoteInstance && newValue !== summernoteInstance.summernote('code')) {summernoteInstance.summernote('code', newValue);}
});// 组件销毁前清理资源
onBeforeUnmount(() => {if (summernoteInstance) {summernoteInstance.summernote('destroy');summernoteInstance = null;}
});// 图片上传函数
const uploadImage = (file) => {proxy.$modal.loading("正在上传文件,请稍候...");const formData = new FormData();formData.append('file', file);// 调用后端API上传图片fetch(import.meta.env.VITE_APP_BASE_API + "/common/upload", {method: 'POST',body: formData}).then(response => response.json()).then(data => {if (data.url) {// 将图片插入编辑器const imgHtml = `<img src="${data.url}" alt="上传图片">`;console.log(imgHtml)console.log(summernoteInstance)summernoteInstance.summernote('code', summernoteInstance.summernote("code") + imgHtml);proxy.$modal.closeLoading();} else {alert('图片上传失败');}}).catch(error => {console.error('上传错误:', error);alert('网络错误,上传失败');});
};
</script>

三、使用

<SummernoteEditor :modelValue="form.content"/>import SummernoteEditor from '@/components/summernoteEditor.vue';
http://www.xdnf.cn/news/1085041.html

相关文章:

  • OpenStack云平台管理
  • 回溯题解——子集【LeetCode】输入的视角(选或不选)
  • uniapp运行项目到ios基座
  • 【图像与信号处理】基于可微分二值化网络(DBNet)与循环卷积神经网络(CRNN)的电梯铭牌和限速器检验单识别方法
  • 6,Receiving Messages:@KafkaListener Annotation
  • mac中有多个java版本涉及到brew安装中,怎么切换不同版本
  • Baklib作为赞助商参加RubyConf China 2025 技术大会
  • 宝塔下载pgsql适配spring ai
  • Qt中的坐标系
  • 如果让计算机理解人类语言- Word2Vec(Word to Vector,2013)
  • 1.1_5_2 计算机网络的性能指标(下)
  • 腾讯云录音文件快速识别实战教程
  • Oracle PL/SQL 编程基础详解(从块结构到游标操作)
  • vue3 字符包含
  • C++标准库中各种互斥锁的用法 mutex
  • WebRTC与RTMP
  • AtCoder AT_abc413_d [ABC413D] Make Geometric Sequence
  • 【Godot4】正则表达式总结与测试
  • 操作系统【2】【内存管理】【虚拟内存】【参考小林code】
  • 使用Scapy构造OSPF交互报文欺骗网络设备与主机建立Full关系
  • 20250706-12-Docker快速入门(下)-容器数据持久化_笔记
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • 桥梁桥拱巡检机器人cad+【4张】设计说明书+绛重+三维图
  • React 英语单词消消乐一款专为英语学习设计的互动式记忆游戏
  • 20250706-11-Docker快速入门(下)-构建Nginx镜像和Tomcat镜像_笔记
  • DTW模版匹配:弹性对齐的时间序列相似度度量算法
  • 计算机网络实验——互联网安全实验
  • 【C++】C++四种类型转换操作符详解
  • 如何使用xmind编写测试用例
  • Docker容器中安装MongoDB,导入数据