VueはリッチテキストエディタVue-Quill-Editorを使用しています。(画像を含むカスタムアップロードサービス、コピー貼り付けパターンのクリアなど)


教程を使います。
1、プラグインをインストールする:npm install vue-quill-editor2、インストールプラグインの依存性:npm install quill3、main.jsファイルに導入する:

import Vue from 'vue'
import VueQuillEditor from 'vue-quill-editor'

import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

Vue.use(VueQuillEditor)
new Vue({
 VueQuillEditor,
 render: h => h(App),
}).$mount('#app')
4、vueページで使用する(コードが完全で、コピーすれば使えます):

<template>
 <div id="quillEditorId">
  <el-upload
   class="avatarUploader"
   action="https://jsonplaceholder.typicode.com/posts/"
   :show-file-list="false"
   :on-success="handleAvatarSuccess"
   :before-upload="beforeAvatarUpload"
  >
   <img v-if="imageUrl" :src="imageUrl" class="avatar" />
   <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
  <quill-editor
   id="myQuillEditorId"
   ref="myQuillEditor"
   v-model="ruleForm.editeContent"
   :options="editorOption"
   @change="handelEditorChange($event)"
  >
  </quill-editor>
 </div>
</template>
<script>
const toolbarOptions = [
 ['bold', 'italic', 'underline', 'strike'], //  ,  ,   ,   
 ['blockquote', 'code-block'], //  、    
 [{ header: 1 }, { header: 2 }], //  ,      ;1、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'], //      
 ['image'], //    、    (video)、   (link)
]
export default {
 data() {
  return {
   imageUrl: '',
   editeContent: '',
   editorOption: {
    modules: {
     clipboard: {
      //    ,           
      matchers: [[Node.ELEMENT_NODE, this.HandleCustomMatcher]],
     },
     toolbar: {
      container: toolbarOptions, //    
      handlers: {
       image: function(value) {
        if (value) {
         //           class,    .el-icon-plus。        
         document.querySelector('.el-icon-plus').click()
        } else {
         this.quill.format('image', false)
        }
       },
      },
     },
    },
    placeholder: '',
   },
  }
 },
 computed: {},
 async mounted() {},
 methods: {
  handleAvatarSuccess(res, file) {
   //           
   console.log(res, file)
  },
  beforeAvatarUpload(data) {
   //   :        ,         。    image           
   //       (           )
   //          
   let quill = this.$refs.myQuillEditor.quill
   //        ,                
   if (data.url) {
    //         ,data.url              
    let length = quill.getSelection().index
    //     ,data.url            
    quill.insertEmbed(length, 'image', data.url)
    //        
    quill.setSelection(length + 1)
   } else {
    this.$message.closeAll()
    this.$message.error('      ')
   }
  },
  handelEditorChange(el) {
   console.log(el, 'el')
  },
  HandleCustomMatcher(node, Delta) {
   //   、   ,       ,      ,     
   let ops = []
   Delta.ops.forEach(op => {
    if (op.insert && typeof op.insert === 'string') {
     ops.push({
      insert: op.insert,
     })
    }
   })
   Delta.ops = ops
   return Delta
  },
 },
}
</script>
<style scoped lang="scss">
#quillEditorId {
 .avatarUploader {
  display: none; //         
 }
}
</style>
まとめ:
1、変数toolbarOptionsはユーザー定義のツールバーを表しています。公式サイト(公式サイトで書いたのは簡単です)を参照したり、本文のコードを詳しく見たりします。
2、単独で画像を処理しないと、写真は直接base 64に変換され、DOMに従って一緒にサービスをアップロードする。
3、ここでは画像に対してカスタム処理を行い、ローカル画像を選択すると、単独でサービスにアップロードし、住所を返した後、リッチテキスト編集中の現在のノードに直接挿入する。コードの中でeditonit Optionのhandlesのイメージ関数を見て、および富んでいるテキストのエディタの現在のカーソルの関数before AvatarrUploadを挿入して、コードの中で詳しい注釈があります。
4、パネルを貼り付け、変数clipboard。コピーした自分のスタイルを整理したいなら、貼り付け板を使って整理します。関数はHandleCustomatchです。
5、コピー貼り付けの場合は、一言多く言います。プロセスでは、エディタは元のDOMをエディタが許可しているDOM要素に変えましたので、この塊はもう処理しなくてもいいです。
ここで、Vueについて豊富なテキストエディタVue-Quill-Editor(画像を含むカスタムアップロードサービス、コピー貼り付けパターンのクリアなど)の記事を紹介します。これまでの記事や続きを検索してください。これからもよろしくお願いします。