当前位置:   article > 正文

vue前端富文本框使用(wangeditor富文本框)

前端富文本

        前端开发离不开富文本,尤其是在后台管理系统开发中更少不了富文本的使用,目前插件市场上有很多富文本框,功能也是万花齐放,今天就简单介绍一个能满足大部分需求的富文本编辑器===》wangeditor富文本编辑器,首先就是它功能能满足日常使用需求,而且也比较简单,接下来简单介绍一下使用方法:

第一步:使用node引入wangeditor富文本编辑器插件

  • npm install wangeditor

第二步:创建富文本编辑器组件;我们自己在二次封装一下该组件方便使用

        a.在组件components内定义文件QuillEditor.vue文件

        b.QuillEditor.vue文件代码

  1. <template>
  2. <div class="quillEditor">
  3. <Toolbar
  4. class="toolbar-style"
  5. :editor="editorRef"
  6. :defaultConfig="toolbarConfig"
  7. :mode="mode"
  8. />
  9. <Editor
  10. class="editor-style"
  11. v-model="valueHtml"
  12. :defaultConfig="editorConfig"
  13. :mode="mode"
  14. @onCreated="handleCreated"
  15. @vnode-updated="getData"
  16. />
  17. </div>
  18. </template>
  19. <script>
  20. import '@wangeditor/editor/dist/css/style.css' //引入富文本插件全局样式
  21. import { onBeforeUnmount, ref, shallowRef } from 'vue' //引入vue3组件内容
  22. import { Editor, Toolbar } from '@wangeditor/editor-for-vue' //引入富文本组件
  23. import request from '@/http/request' //引入的全局的请求axios,引入这个主要是在富文本内插入图片以及视频时使用
  24. import { ElMessage } from 'element-plus' //消息提示组件,也可以自己定义,主要是错误提示时使用
  25. export default {
  26. components: { Editor, Toolbar },
  27. props: {
  28. content: {
  29. type: String,
  30. default: "" //富文本的内容输入
  31. }
  32. },
  33. //监听父组件传来的内容,主要是富文本内容回显(注意,这儿传入的内容必须是html格式,不然富文本识别不了)
  34. watch: {
  35. content: {
  36. handler(value) {
  37. this.valueHtml = value;
  38. },
  39. deep: true,
  40. immediate:true
  41. }
  42. },
  43. setup() {
  44. // 编辑器实例,必须用 shallowRef
  45. const editorRef = shallowRef()
  46. // 内容 HTML
  47. const valueHtml = ref("")
  48. //工具栏配置项,具体配置可去官网查看详细
  49. const toolbarConfig = {
  50. }
  51. //编辑框配置项
  52. const editorConfig = {
  53. placeholder: '请输入正文...',
  54. readOnly: false, //设置只读模式
  55. scroll: true, //是否支持滑动
  56. maxLength: 20000,
  57. MENU_CONF: {}
  58. }
  59. //自定义图片上传(这个上传文件接口是我自己写的,上传成功后会返回一个文件地址url作为内容回显)
  60. editorConfig.MENU_CONF['uploadImage'] = {
  61. async customUpload(file, insertFn) {
  62. request("/api/sys/uploadFile","POST",{"file":file},{'Content-Type':'multipart/form-data'}).then(res=>{
  63. if(res.data.status==="ok") {
  64. const alt = ""; //图片介绍
  65. const href = ""; //图片链接
  66. insertFn(res.data.data, alt, href) //文件URL回显在富文本内方法
  67. }else {
  68. //错误消息提示,可自定
  69. ElMessage({
  70. type: "error",
  71. message: res.data.data
  72. })
  73. }
  74. })
  75. }
  76. }
  77. //自定义视频上传(这个上传文件接口是我自己写的,上传成功后会返回一个文件地址url作为内容回显)
  78. editorConfig.MENU_CONF['uploadVideo'] = {
  79. async customUpload(file, insertFn) {
  80. request("/api/sys/uploadFile","POST",{"file":file},{'Content-Type':'multipart/form-data'}).then(res=>{
  81. if(res.data.status==="ok") {
  82. const poster = ""; //视频封面链接
  83. insertFn(res.data.data, poster) //文件URL回显在富文本内方法
  84. }else {
  85. //错误消息提示,可自定
  86. ElMessage({
  87. type: "error",
  88. message: res.data.data
  89. })
  90. }
  91. })
  92. }
  93. }
  94. // 组件销毁时,也及时销毁编辑器
  95. onBeforeUnmount(() => {
  96. const editor = editorRef.value;
  97. if (editor == null) return;
  98. editor.destroy();
  99. })
  100. const handleCreated = (editor) => {
  101. editorRef.value = editor // 记录 editor 实例,重要!
  102. }
  103. return {
  104. editorRef,
  105. valueHtml,
  106. mode: 'default', // 或 'simple'
  107. toolbarConfig,
  108. editorConfig,
  109. handleCreated
  110. };
  111. },methods: {
  112. //获取数据且向父组件传值
  113. getData() {
  114. this.$emit("contentData",this.valueHtml)
  115. }
  116. }
  117. }
  118. </script>
  119. <style lang="scss">
  120. .quillEditor {
  121. width: 600px;
  122. border: 1px solid #ccc !important;
  123. .toolbar-style {
  124. border-bottom: 1px solid #ccc !important;
  125. }
  126. .editor-style {
  127. height: 400px !important;
  128. overflow-y: hidden !important;
  129. }
  130. }
  131. </style>

第三步:页面使用;可以直接在要使用页面引入该组件或者全局注册该组件

下面是我直接在页面中引入方法使用:

  1. <template>
  2. <div>
  3. <quillEditor :content="textContent" @contentData="getPrivacyAgreement"/>
  4. </div>
  5. </template>
  6. <script>
  7. import QuillEditor from '@/components/QuillEditor.vue'
  8. export default {
  9. components: {UploadImg,QuillEditor},
  10. data() {
  11. return {
  12. textContent: "", //传入子组件回显内容,必须是html格式内容
  13. }
  14. },methods: {
  15. //富文本内容输出
  16. getPrivacyAgreement(val) {
  17. console.log(val)
  18. }
  19. }
  20. }
  21. </script>

使用效果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/733913
推荐阅读
相关标签
  

闽ICP备14008679号