当前位置:首页 > VUE

vue如何实现富文本

2026-01-20 13:57:11VUE

使用 vue-quill-editor 实现富文本

安装 vue-quill-editor 依赖

npm install vue-quill-editor --save

在组件中引入并使用

import { quillEditor } from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

export default {
  components: {
    quillEditor
  },
  data() {
    return {
      content: ''
    }
  }
}

模板中使用

<quill-editor v-model="content" :options="editorOption"></quill-editor>

配置编辑器选项

editorOption: {
  placeholder: '请输入内容',
  modules: {
    toolbar: [
      ['bold', 'italic', 'underline', 'strike'],
      ['blockquote', 'code-block'],
      [{ 'header': 1 }, { 'header': 2 }],
      [{ 'list': 'ordered'}, { 'list': 'bullet' }],
      [{ 'script': 'sub'}, { 'script': 'super' }],
      [{ 'indent': '-1'}, { 'indent': '+1' }],
      [{ 'direction': 'rtl' }],
      [{ 'size': ['small', false, 'large', 'huge'] }],
      [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
      [{ 'color': [] }, { 'background': [] }],
      [{ 'font': [] }],
      [{ 'align': [] }],
      ['clean'],
      ['link', 'image', 'video']
    ]
  }
}

使用 tinymce-vue 实现富文本

安装 tinymce-vue 和 tinymce

npm install @tinymce/tinymce-vue tinymce --save

在组件中引入

import Editor from '@tinymce/tinymce-vue'

模板中使用

<editor
  v-model="content"
  :init="initOptions"
/>

配置初始化选项

initOptions: {
  height: 500,
  language_url: '/static/tinymce/langs/zh_CN.js',
  language: 'zh_CN',
  plugins: 'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools textpattern help emoticons autosave',
  toolbar: 'code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | \
    styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
    table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen | bdmap indent2em lineheight formatpainter axupimgs',
  images_upload_handler: function (blobInfo, success, failure) {
    // 图片上传处理
  }
}

自定义富文本编辑器实现

创建基础编辑器组件

vue如何实现富文本

<div contenteditable="true" ref="editor" @input="updateContent"></div>

处理内容更新

updateContent() {
  this.content = this.$refs.editor.innerHTML
}

添加基本工具栏功能

<div class="toolbar">
  <button @click="formatText('bold')">加粗</button>
  <button @click="formatText('italic')">斜体</button>
  <button @click="insertImage">插入图片</button>
</div>

实现文本格式化方法

formatText(command, value = null) {
  document.execCommand(command, false, value)
  this.$refs.editor.focus()
}

实现图片插入功能

insertImage() {
  const url = prompt('输入图片URL')
  if (url) {
    document.execCommand('insertImage', false, url)
  }
}

富文本内容的安全处理

安装 DOMPurify 进行内容净化

vue如何实现富文本

npm install dompurify --save

在提交前净化内容

import DOMPurify from 'dompurify'

methods: {
  submitContent() {
    const cleanContent = DOMPurify.sanitize(this.content)
    // 提交净化后的内容
  }
}

设置白名单允许的标签和属性

const cleanContent = DOMPurify.sanitize(this.content, {
  ALLOWED_TAGS: ['p', 'b', 'i', 'u', 'img', 'br', 'a'],
  ALLOWED_ATTR: ['href', 'src', 'alt']
})

富文本内容存储与显示

存储内容到数据库

axios.post('/api/content', {
  content: this.content
})

显示富文本内容

<div v-html="content"></div>

添加样式确保显示一致

.ql-editor {
  min-height: 200px;
}
.ql-container {
  font-family: inherit;
}

分享给朋友:

相关文章

vue怎么实现文本代码实现

vue怎么实现文本代码实现

Vue 实现文本代码展示的方法 在 Vue 中展示代码块或格式化文本,可以通过多种方式实现。以下是几种常见方法: 使用 <pre> 和 <code> 标签 最简单的原生 H…

vue如何实现滚动

vue如何实现滚动

Vue 实现滚动的方法 使用原生 JavaScript 方法 在 Vue 中可以通过 window.scrollTo 或 Element.scrollIntoView 实现滚动。例如,滚动到页面顶部:…

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.definePr…

vue如何实现到期提醒

vue如何实现到期提醒

实现思路 在Vue中实现到期提醒功能,可以通过计算日期差、定时检查和通知用户三个核心步骤完成。需要结合Vue的响应式特性和JavaScript的日期处理能力。 计算日期差 使用JavaScript…

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…