preface

Forum posts have editor requirements, note the introduction and use of rich text editors

vue-quill-editor

Quill-based rich text editor for Vue, supporting server-side rendering and single-page applications.

Open source website: github.com/surmon-chin…

The introduction of NuxtJS

The installation

npm install vue-quill-editor --save

# or
yarn add vue-quill-editor
Copy the code

Nuxt. Config. Js configuration

  plugins: [
    '@/plugins/element-ui',
    {
      src: '~plugins/nuxt-quill-plugin.js'.ssr: false // Render only on the client side}].Copy the code

plugins/nuxt-quill-plugin.js

import Vue from 'vue'

import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
if (process.browser) {
// Add a browser-side judgment to render only on the browser side
  const VueQuillEditor = require('vue-quill-editor/dist/ssr')
  Vue.use(VueQuillEditor)
}
Copy the code

Components use

<template>
  <div class="quill-editor">
    <slot name="toolbar"></slot>
    <div ref="editor"></div>
  </div>
</template>

<script>
  // require sources
  import _Quill from 'quill'
  import defaultOptions from './options'
  const Quill = window.Quill || _Quill

  // pollfill
  if (typeof Object.assign ! ='function') {
    Object.defineProperty(Object.'assign', {
      value(target, varArgs) {
        if (target == null) {
          throw new TypeError('Cannot convert undefined or null to object')}const to = Object(target)
        for (let index = 1; index < arguments.length; index++) {
          const nextSource = arguments[index]
          if(nextSource ! =null) {
            for (const nextKey in nextSource) {
              if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
                to[nextKey] = nextSource[nextKey]
              }
            }
          }
        }
        return to
      },
      writable: true.configurable: true})}// export
  export default {
    name: 'quill-editor'.data() {
      return {
        _options: {},
        _content: ' ',
        defaultOptions
      }
    },
    props: {
      content: String.value: String.disabled: {
        type: Boolean.default: false
      },
      options: {
        type: Object.required: false.default: () = >({})},globalOptions: {
        type: Object.required: false.default: () = >({})}},mounted() {
      this.initialize()
    },
    beforeDestroy() {
      this.quill = null
      delete this.quill
    },
    methods: {
      // Init Quill instance
      initialize() {
        if (this.$el) {

          // Options
          this._options = Object.assign({}, this.defaultOptions, this.globalOptions, this.options)

          // Instance
          this.quill = new Quill(this.$refs.editor, this._options)
          
          this.quill.enable(false)

          // Set editor content
          if (this.value || this.content) {
            this.quill.pasteHTML(this.value || this.content)
          }

          // Disabled editor
          if (!this.disabled) {
            this.quill.enable(true)}// Mark model as touched if editor lost focus
          this.quill.on('selection-change'.range= > {
            if(! range) {this.$emit('blur'.this.quill)
            } else {
              this.$emit('focus'.this.quill)
            }
          })

          // Update model if text changes
          this.quill.on('text-change'.(delta, oldDelta, source) = > {
            let html = this.$refs.editor.children[0].innerHTML
            const quill = this.quill
            const text = this.quill.getText()
            if (html === '<p><br></p>') html = ' '
            this._content = html
            this.$emit('input'.this._content)
            this.$emit('change', { html, text, quill })
          })

          // Emit ready event
          this.$emit('ready'.this.quill)
        }
      }
    },
    watch: {
      // Watch content change
      content(newVal, oldVal) {
        if (this.quill) {
          if(newVal && newVal ! = =this._content) {
            this._content = newVal
            this.quill.pasteHTML(newVal)
          } else if(! newVal) {this.quill.setText(' ')}}},// Watch content change
      value(newVal, oldVal) {
        if (this.quill) {
          if(newVal && newVal ! = =this._content) {
            this._content = newVal
            this.quill.pasteHTML(newVal)
          } else if(! newVal) {this.quill.setText(' ')}}},// Watch disabled change
      disabled(newVal, oldVal) {
        if (this.quill) {
          this.quill.enable(! newVal) } } } }</script>

Copy the code

Use effect

Refer to the website

Github.com/surmon-chin…

Juejin. Cn/post / 684490…

www.jianshu.com/p/dcd2aac87…

Stackoverflow.com/questions/4…

www.cnblogs.com/hrrm/p/1101…