vue3+vite3+typescript使用wangEditor编辑器

news2024/10/6 1:40:09

文章目录

      • ⭐写在前面
      • ⭐步入正题
        • 🚀1.安装
        • 🚀2.配置
          • 2.1 存数据
          • 2.2 读数据
        • 🚀3.跨域及其他问题
          • 3.1 跨域
          • 3.2 其他问题
        • 🚀4.写在最后

⭐写在前面

🚀 框架Vue3 + Vite3 + TypeScript

👉 Vue3:更快、更小、更易维护

Vue3 是 Vue.js 的最新版本,相比于 Vue2,Vue3 在性能、体积和开发体验上都有了大幅度的提升。其中最大的变化是使用了新的响应式系统,使得 Vue3 在性能方面有了很大的提升。此外,Vue3 还引入了 Composition API,使得代码更易维护和重用。

👉 Vite3:更快的开发体验

Vite3 是一个基于 ES Modules 的构建工具,它利用了浏览器原生的 ES Modules 特性,实现了更快的开发体验。Vite3 的热更新速度非常快,可以在几乎不等待的情况下进行热更新。此外,Vite3 还支持多种语言和框架,包括 Vue、React、Angular 等。

👉 TypeScript:更安全、更可维护的代码

TypeScript 是 JavaScript 的一个超集,它为 JavaScript 添加了静态类型检查和其他一些特性,使得代码更安全、更易维护。TypeScript 可以在编译时检查代码的类型错误,避免了在运行时出现类型错误的情况。此外,TypeScript 还支持面向对象编程和模块化编程,使得代码更易维护和重用。

⭐步入正题

🚀1.安装

npm install @wangeditor/editor-for-vue@next --save

🚀2.配置

根据文档给出的模板:

<template>
    <div style="border: 1px solid #ccc">
      <Toolbar
        style="border-bottom: 1px solid #ccc"
        :editor="editorRef"
        :defaultConfig="toolbarConfig"
        :mode="mode"
      />
      <Editor
        style="height: 500px; overflow-y: hidden;"
        v-model="valueHtml"
        :defaultConfig="editorConfig"
        :mode="mode"
        @onCreated="handleCreated"
      />
    </div>
</template>
<script setup lang="ts">
import {  shallowRef,ref,onBeforeUnmount, reactive} from 'vue';
import request from '@/utils/axios'
import { useRouter } from 'vue-router';
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
const router =useRouter()
const editorRef = shallowRef()
const mode = 'default'
const valueHtml = ref('')
const toolbarConfig = { }
const editorConfig = { placeholder: '请输入内容...' }
const handleChange = (editor:any) => {
      console.log('change:', editor.getHtml());
    };
const articleList =reactive({
  content:valueHtml,
  name:"test",
})


onBeforeUnmount(() => {
        const editor = editorRef.value
        if (editor == null) return
        editor.destroy()
    })
const handleCreated = (editor:any) => {
      editorRef.value = editor // 记录 editor 实例,重要!
    }
</script>

在这里插入图片描述
valueHtml用来存储编辑器的内容。它通过ref函数创建,并在Editor组件上使用v-model指令进行绑定,从而实现了双向数据绑定。当用户在编辑器中输入或修改文本时,valueHtml的值会自动更新,当我们点击提交按钮时,会将文章内容提交到数据库。

2.1 存数据
const submit=()=>{    //提交文章内容到数据库
  request.post('/article',articleList).then(res=>{
    console.log(res.status);
  })
}

在这里插入图片描述
富文本编辑器的内容通常是HTML格式的,因此在存储到数据库中时也应该以HTML格式进行存储,可以将该字段定义为VARCHAR或TEXT类型。

2.2 读数据
<template>
    <Editor style="height: 500px;width: 500px; overflow-y: hidden;" v-model="valueHtml" :defaultConfig="editorConfig">
    </Editor>
</template>
<script setup lang="ts">
import request from '@/utils/axios';
import { onMounted, ref } from 'vue';
import { useRoute } from 'vue-router';
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { Editor } from '@wangeditor/editor-for-vue'
const valueHtml: any = ref('')
const editorConfig = { readOnly: true }
onMounted(() => {  
    let route = useRoute()
    //获取文章内容
    request.get('/article/' + route.query.id).then(res => {
        console.log(res.data.data.content);
        valueHtml.value = res.data.data.content![在这里插入图片描述](https://img-blog.csdnimg.cn/882a01db2bc747eab2cc98dacb649d5e.png#pic_center)

    })
})
</script>

这里也使用了编辑器进行渲染,通过编辑器配置readOnly: true可以设置为只读模式,这样可以将富文本的样式排版保留。虽然渲染HTML格式内容可以使用v-html,排版虽在但是富文本本有的样式会没,例如:
v-html:
在这里插入图片描述
使用富文本编辑器
在这里插入图片描述

🚀3.跨域及其他问题

3.1 跨域
  //vite.config.ts
  server:{
    hmr:true,
    open: true,//启动项目自动弹出浏览器
    port: 3000,//启动端口
        proxy: {
          '/api': {
            target: 'http://localhost:9090',	//实际请求地址
            changeOrigin: true,
            rewrite: (path) => path.replace(/^\/api/, '')
          },
        }
  }
 //axios.ts
const request = axios.create({
    // headers:{
    //   token : ``
    // },
    baseURL:"/api",
    timeout: 3000
  });
3.2 其他问题

HMR error: Cannot access ‘…’ before initialization

这是循环引用导致的报错,会导致热更新报错,需要手动刷新页面才能生效
错误写法: mian.js与xx.vue重复导入import router from '@/router'

//mian.js
import router from '@/router'

createApp(App).use(router).mount('#app')

//xx.vue
import router from "@/router";

正确写法:

//mian.js
import router from '@/router'

createApp(App).use(router).mount('#app')

//xx.vue
import { useRouter } from 'vue-router';
const router = useRouter()

🚀4.写在最后

更多富文本编辑器配置说明请看:wangEditor文档

后端转前端的小白一枚,一起加油~

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

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

相关文章

地铁站人流检测硬件部分

目录 一、概述 二、驱动程序 2.1debug串口 2.2体重传感器HX711 2.3滴答定时器 2.4ESP8266 2.5人体检测 2.6 IIC的GPIO 2.7 OLED的IIC 2.8 LED 三、应用 四、中断 一、概述 使用STM32C8T6作为主控 A9 ---> tx&#xff08;调试串口&#xff09; A10 ---> …

算法训练 Day41 | 动态规划

343. 整数拆分 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;分拆数字i&#xff0c;可以得到的最大乘积为dp[i]。 确定递推公式&#xff1a;dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 可以想 dp[i]最…

【python装饰器:看懂这10个例子你就掌握了!】

基本说明 Python 装饰器是一种函数&#xff0c;它可以用来修改其他函数的功能。它是 Python 中的一项高级编程技术&#xff0c;也是 Python 中比较重要的语法之一。 简单来说&#xff0c;装饰器就是一个函数&#xff0c;它可以接受一个函数作为参数&#xff0c;并返回一个函数…

Obsidian+坚果云+FolderSync解决电脑端和安卓端同步方案

目录1.Obsidian电脑端准备 2.Obsidian安卓端准备 3.坚果云电脑端准备 4.坚果云手机端准备 5.FolderSync手机端准备 6.百度云冗余备份 1.Obsidian电脑端准备 这里以windows版本为例&#xff0c;下载后安装 1.Obsidian官网&#xff1a;https://obsidian.md/ 官网下载有时候…

电力电网行业IT运维方案

智能电网背景下&#xff0c;电力、电网企业信息化逐渐渗透到其业务链的各个环节&#xff0c;云计算、物联网、移动互联网等新技术的应用&#xff0c;更驱动信息化与业务创新深度融合。电力、电网企业集团信息系统群逐渐朝着一体化方向发展&#xff0c;信息链越来越长&#xff0…

银行数字化转型导师坚鹏:宏观经济趋势与资本行业机遇和挑战

2023年宏观经济趋势与资本行业机遇和挑战 课程背景&#xff1a; 很多学员存在以下问题&#xff1a; 不知道我国目前的宏观经济形势&#xff1f; 不清楚宏观环境对我国经济的影响&#xff1f; 不知道资本行业未来主要发展趋势&#xff1f; 课程特色&#xff1a; 精彩解…

基于php的校园校园兼职网站的设计与实现

摘要 近年来&#xff0c;信息技术在大学校园中得到了广泛的应用&#xff0c;主要体现在两个方面&#xff1a;一是学校管理系统&#xff0c;包括教务管理、行政管理和分校管理&#xff0c;是我国大学管理和信息传递的主要渠道。二是学生生活服务平台。而随着大学生毕业人数的年…

leetcode重点题目分类别记录(四)图论深入

文章目录 入度出度最大网络秩可以到达所有点的最少点数目 并查集省份数量等式方程的可满足性按字典序排列最小的等效字符串以图判树 二分图判断二分图 深度优先搜索封闭岛屿数量太平洋大西洋水流问题 广度优先搜索树上逃逸最短路径多源最短路径 拓扑排序DFS解决拓扑排序BFS解决…

MIPS指令集-mars-cpu

MIPS通用寄存器 MIPS有32个通用寄存器&#xff08;$0-$31&#xff09;&#xff0c;各寄存器的功能及汇编程序中使用约定如下&#xff1a; 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved f…

K近邻算法(手写代码+图像识别实践)

k近邻算法作为一个分类算法&#xff0c;他通过计算不同特征值之间的距离来进行分类&#xff0c;它的工作原理是存在一个样本集合作为训练样本集&#xff0c;且每个样本都存在一个标签&#xff0c;此时&#xff0c;输入一个新的样本不存在标签&#xff0c;我们通过计算这个新样本…

【Android车载系列】第10章 系统服务-SystemServer源码分析(API28)

1 SystemServer启动 &emps;&emps;SystemServer进程启动&#xff0c;首先从SystemServer.java文件的main()方法开始。 290 /** 291 * The main entry point from zygote. 292 */ 293 public static void main(String[] args) { 294 new SystemSe…

S32K3系列单片机开发笔记(SIUL是什么/配置引脚复用的功能·)

前言 今天花时间看了一下&#xff0c;SIUL2模块的相关内容&#xff0c;并参照文档&#xff0c;以及例程作了一些小记录&#xff0c;知道该如何使用这个外设&#xff0c;包括引脚的配置&#xff0c;中断配置&#xff0c;以及常用函数的使用等&#xff0c;但对其中的一些细节还需…

如何利用代码快速生成mapper.xml的<resultMap>

一&#xff0c;问题引入 当我们开发 mapper.xml ---->dao接层 ---->service接口---->serviceImp ---->controller层&#xff0c; 其中在mapper.xml编写查询语句的sql时会遇到sql查询到的结果 涉及到多张表的字段&#xff0c;或者单张表的字段过多时&#xff0c; 这…

Python文件处理

文章目录 1️⃣基本语法2️⃣读取文件⚜️读取整个文件read()⚜️with 关键词⚜️逐行读取 3️⃣写入文件⚜️写入文件write()⚜️写入数字⚜️追加内容到文件 4️⃣读取和写入二进制文件 简介 读完本篇你将学会文件的创建、读取、写入等。 1️⃣基本语法 在Python中使用文件的…

ThreadLocal机制解读和源码分析

目录 线程数据共享和安全 -ThreadLocal 什么是 ThreadLocal 代码演示 创建Dog.java 创建Pig.java T2DAO.java T2DAO T1解读set T1Service 解读 get ThreadLocalTest这个是换一种法 ThreadLocal 原理分析图 1. ThreadLocal 原理分析图(重点 set 和 get) 线程数据共…

Go Fuzzing:发现你未曾发现的漏洞

文章目录 Fuzzing(模糊测试)要求示例模拟crash 总结参考资料 Fuzzing(模糊测试) go fuzz文档 对于软件开发者而言&#xff0c;一项重要的任务就是确保程序的安全性。而其中一种风险就是软件中可能存在的漏洞。传统的测试方法往往需要耗费大量的时间和人力&#xff0c;而使用F…

【C++: 模块二 ---运算符、流程控制语句】

C&#xff1a; 模块二 ---运算符、流程控制语句 一、运算符&#xff1a;1.1算数运算符&#xff1a;1.2赋值运算符&#xff1a;1.3比较运算符&#xff1a;1.4逻辑运算符&#xff1a;1.5三目运算符&#xff1a; 二、程序流程结构2.1顺序结构&#xff1a;2.2选择结构&#xff1a;&…

ChatGPT免费第一版本

最近利用空余时间做了一个供大家免费体验的chatgpt国内可直接访问的版本 输入12345gpt.com可直接访问 贴上GPT给我回复的内容&#xff0c;&#x1f600; 当今社会&#xff0c;交流已经成为人们日常不可或缺的一部分。然而&#xff0c;随着技术的发展&#xff0c;人们对于交流工…

【Linux 裸机篇(七)】I.MX6U 中断系统

目录 一、中断向量表1. 中断向量偏移 二、中断系统简介1. 创建中断向量表 三、GIC 控制器简介1. 中断 ID 四、GIC 逻辑分块1. Distributor(分发器端)2. CPU Interface(CPU 接口端) 五、CP15 协处理器六、中断使能1. IRQ 和 FIQ 总中断使能2. ID0~ID1019 中断使能和禁止 七、中断…

【PXE高效的批量网络装机】

目录 一、PXE的概述1.1、PXE批量部署的优点1.2、搭建PXE满足的以下的前提条件1.3、搭建PXE远程安装 二、搭建PXE远程安装服务器1、安装并启动 TFTP 服务2、安装并启用 DHCP 服务3、准备 Linux 内核、初始化镜像文件4、准备PXE 引导程序5、安装FTP服务&#xff0c;准备CentOS 7 …