vue-quill-editor 在nuxt中使用

引入安装

npm install vue-quill-editor --save

在nuxt中引用

  • 在plugins中创建nuxt-quill-plugin.js
import Vue from 'vue'

import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
if (process.browser) {
// 加一个浏览器端判断,只在浏览器端才渲染就不会报错了
  const VueQuillEditor = require('vue-quill-editor/dist/ssr')
  Vue.use(VueQuillEditor)
}
  • 设置nuxt.config.js
plugins[
    {
      src: '~plugins/nuxt-quill-plugin.js',
      ssr: false //仅在客户端渲染
    }
]

 css: ['~/assets/css/base.css',
    '~/assets/css/main.css',
    '~/assets/css/color-dark.css',
    'element-ui/lib/theme-chalk/index.css',
    'quill/dist/quill.snow.css',
    'quill/dist/quill.bubble.css',
    'quill/dist/quill.core.css'
  ],

 build: {
    vendor: ['axios',
      'element-ui',
      'vue-quill-editor',
      'vee-validate'
    ],

 plugins: [
      new webpack.ProvidePlugin({
        'window.Quill': 'quill/dist/quill.js',
        'Quill': 'quill/dist/quill.js'
      })
    ],
  • 前段引用
<section class="container"
             v-loading="isLoading"
             :element-loading-text="'上传进度'+ progress"
             element-loading-spinner="el-icon-loading"
             element-loading-background="rgba(0, 0, 0, 0.8)">
<input class="file" type="file" style="display:none" id="file" ref="input" @change="doUpload">
<div class="quill-editor"
         :content="content"
         @change="onEditorChange($event)"
         @blur="onEditorBlur($event)"
         @focus="onEditorFocus($event)"
         @ready="onEditorReady($event)"
         v-quill:myQuillEditor="editorOption">
</div>
</section>

  export default {
    data () {
      const self = this
      return {
        editorOption: {
          // some quill options
          modules: {
            toolbar: {
              container: [
                ['bold', 'italic', 'underline', 'strike'], // toggled buttons
                ['blockquote', 'code-block'],
                ['link', 'image'],

                [{'header': 1}, {'header': 2}], // custom button values
                [{'list': 'ordered'}, {'list': 'bullet'}],
                [{'script': 'sub'}, {'script': 'super'}], // superscript/subscript
                [{'indent': '-1'}, {'indent': '+1'}], // outdent/indent
                [{'direction': 'rtl'}], // text direction

                [{'size': ['small', false, 'large', 'huge']}], // custom dropdown
                [{'header': [1, 2, 3, 4, 5, 6, false]}],

                [{'color': []}, {'background': []}], // dropdown with defaults from theme
                [{'font': []}],
                [{'align': []}],

                ['clean'] // remove formatting button
              ],
              handlers: {
                'image': function () {
                  this.quill.format('image', false)// 禁用quill内部上传图片方法
                  self.imgHandler(this)
                }
              }
            }
          }
        }
      }
    },
    methods: {
      handleRemove (file, fileList) {
        console.log(file, fileList)
      },
      handlePreview (file) {
        console.log(file)
      },
      onEditorBlur (editor) {
        console.log('editor blur!', editor)
      },
      onEditorFocus (editor) {
        console.log('editor focus!', editor)
      },
      onEditorReady (editor) {
        console.log('editor ready!', editor)
      },
      onEditorChange ({editor, html, text}) {
        console.log('editor change!', editor, html, text)
        this.content = html
      },
      imgHandler (handle) {
        this.quill = handle.quill
        var inputfile = document.getElementById('file')
        inputfile.click()
      },
      doUpload: async function () {
        let file = document.getElementById('file').files[0]
        let formdata = new FormData()// 创建form对象
        formdata.append('file', file, file.name)
        let config = {
          headers: {'Content-Type': 'multipart/form-data'},
          onUploadProgress: progressEvent => {
            let complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
            this.progress = complete
          }
        } // 添加请求头
        this.isLoading = true
        let res = await axios.post('http://10.96.153.89:5000/', formdata, config)
        this.isLoading = false
        console.log(res)
        this.quill.insertEmbed(length, 'image', 'http://10.96.153.89:5000' + res.data)
      },
      async update () {
        let params = {
          title: this.form.title,
          publish_time: this.form.publish_time,
          content: this.content,
          event_id: this.event_id
        }
        console.log(params)
        let res = await axios.post('/api/createEvent', params)
        if (res.data.ret) {
          this.$notify.error({
            message: res.data.errorMsg,
            title: '错误'
          })
        } else {
          this.$notify({
            message: res.data.errorMsg,
            title: '成功',
            type: 'success'
          })
        }
      }
    },
    async mounted () {
      this.event_id = this.$route.query.event_id
      let params = {
        event_id: this.$route.query.event_id
      }
      let res = await axios.get('/api/getEvemtDetail', {params: params})
      let event = res.data.data
      this.form.title = event.title
      this.form.publish_time = event.publish_time
      this.content = event.content
    }
  }

更改原图片上传的默认时间方法

handlers: {
    'image': function () {
      this.quill.format('image', false)// 禁用quill内部上传图片方法
      self.imgHandler(this)
    }
}

##
methods: {
  imgHandler (handle) {
        this.quill = handle.quill
        var inputfile = document.getElementById('file')
        inputfile.click()
      },
}

doUpload: async function () {
        let file = document.getElementById('file').files[0]
        let formdata = new FormData()// 创建form对象
        formdata.append('file', file, file.name)
        let config = {
          headers: {'Content-Type': 'multipart/form-data'},
          onUploadProgress: progressEvent => {
            let complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
            this.progress = complete
          }
        } // 添加请求头
        this.isLoading = true
        let res = await axios.post('http://10.96.153.89:5000/', formdata, config)
        this.isLoading = false
        // 往编辑器中插入一个img标签的图片
        this.quill.insertEmbed(length, 'image', 'http://10.96.153.89:5000' + res.data)
      },
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容