1. 程式人生 > >vue中使用vue-quill-editor富文字編輯器,自定義toolbar,圖片上傳到七牛

vue中使用vue-quill-editor富文字編輯器,自定義toolbar,圖片上傳到七牛

一、npm 安裝 vue-quill-editor 
二、在main.js中引入

import  VueQuillEditor from 'vue-quill-editor'
// require styles 引入樣式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

Vue.use(VueQuillEditor)

 三、將富文字編輯器提出作為元件,上傳圖片到七牛,在獲取七牛返回的圖片url插入到富文字中。

<template>
  <div>
    <quill-editor :options="editorOption" v-model="content" ref="QuillEditor" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)" 
        @change="onEditorChange($event)" @ready="onEditorReady($event)"></quill-editor>
        <!-- 檔案上傳input 將它隱藏-->
        <el-upload class="upload-demo" :action="qnLocation" :before-upload='beforeUpload' :data="uploadData" :on-success='upScuccess'
        ref="upload" style="display:none">
        <el-button size="small" type="primary" id="imgInput" element-loading-text="插入中,請稍候">點選上傳</el-button>
    </el-upload>
  </div>
</template>

<script>
import * as Quill from 'quill' // 引入編輯器
import { upQiniu } from '@/api/manage/***'  //獲取七牛token
export default {
  name: 'quilleditor',
  props: {
    quillData: {
      type: String,
      default: false
    }
  },
  data() {
    return {
        bucketQuery: {
          bucket: 'website-image'
        },
        uploadData: {},
        content:this.quillData, // 富文字編輯器內容
        editorOption:{ // 初始化富文字編輯器
          modules:{
            toolbar:[
              ['bold', 'italic', 'underline', 'strike', 'link','image', 'video'],
              [{ 'header': 1 }, { 'header': 2 }],
              [{ 'list': 'ordered'}, { 'list': 'bullet' }],
              [{ 'indent': '-1'}, { 'indent': '+1' }],
              [{ 'align': [] }],
              [{ 'color': [] }, { 'background': [] }],
              [{ 'font': [] }],
              [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
              ['blockquote', 'code-block'],
              [{ 'size': ['small', false, 'large', 'huge'] }]
            ]
          }
        },
        qiniuaddr: 'pd6rnk9ck.bkt.clouddn.com'  // 這是七牛雲空間的外鏈預設域名
      }
    }, 
    computed: {
      // 上傳七牛的actiond地址,http 和 https 不一樣
      qnLocation () {
        return location.protocol === 'http:' ? 'http://upload.qiniu.com' : 'https://up.qbox.me'
      }
    }, 
    methods: {
      // 圖片上傳之前調取的函式
      beforeUpload (file) {
        return this.qnUpload(file)
      },
      // 圖片上傳前獲得資料token資料
      qnUpload (file) {
        const suffix = file.name.split('.')
        const ext = suffix.splice(suffix.length - 1, 1)[0]
        if (this.uploadType === 'image') { // 如果是點選插入圖片
          // TODO 圖片格式/大小限制
          return upQiniu(this.bucketQuery).then(res => {
            this.uploadData = {
              // key: `image/${suffix.join('.')}_${new Date().getTime()}.${ext}`,  //重新命名
              token: res.data
            }
          })
        } else if (this.uploadType === 'video') { // 如果是點選插入視訊
          return upQiniu(bucketQuery).then(res => {
            this.uploadData = {
              // key: `video/${suffix.join('.')}_${new Date().getTime()}.${ext}`,  //重新命名
              token: res
            }
          })
        }
      },   
      // 圖片上傳成功回撥 插入到編輯器中
      upScuccess (e, file, fileList) {
        let vm = this
        let url = ''
        if (this.uploadType === 'image') { // 獲得檔案上傳後的URL地址
          url = 'http://' + this.qiniuaddr + '/' + e.key
        } else if (this.uploadType === 'video') {
          url = 'http://' + this.qiniuaddr + '/' + e.key
        }
        if (url != null && url.length > 0) { // 將檔案上傳後的URL地址插入到編輯器文字中
          let value = url
          // API: https://segmentfault.com/q/1010000008951906
          // this.$refs.myTextEditor.quillEditor.getSelection();
          // 獲取游標位置物件,裡面有兩個屬性,一個是index 還有 一個length,這裡要用range.index,即當前游標之前的內容長度,然後再利用 insertEmbed(length, 'image', imageUrl),插入圖片即可。
          vm.addRange = vm.$refs.QuillEditor.quill.getSelection()
          value = value.indexOf('http') !== -1 ? value : 'http:' + value
          vm.$refs.QuillEditor.quill.insertEmbed(vm.addRange !== null ? vm.addRange.index : 0, vm.uploadType, value, Quill.sources.USER) // 呼叫編輯器的 insertEmbed 方法,插入URL
        } else {
          this.$message.error(`${vm.uploadType}插入失敗`)
        }
        this.$refs['upload'].clearFiles() // 插入成功後清除input的內容
      },
        
      // 點選圖片ICON觸發事件
      imgHandler (state) {
        this.addRange = this.$refs.QuillEditor.quill.getSelection()
        if (state) {
          let fileInput = document.getElementById('imgInput')
          fileInput.click() // 加一個觸發事件
        }
        this.uploadType = 'image'
      },
      // 點選視訊ICON觸發事件
      videoHandler (state) {
        this.addRange = this.$refs.QuillEditor.quill.getSelection()
        if (state) {
          let fileInput = document.getElementById('imgInput')
          fileInput.click() // 加一個觸發事件
        }
        this.uploadType = 'video'  
      },
      created () {
        this.$refs = {
          QuillEditor: HTMLInputElement,
          imgInput: HTMLInputElement
        }
      },
      onEditorFocus() {
  
      },
      onEditorReady() {
  
      },
      onEditorBlur() {
  
      },
      onEditorChange({editor, html, text}) {
        this.$emit('change-content',html)
        // console.log(html)
      }
    },
    // 頁面載入後執行 為編輯器的圖片圖示和視訊圖示繫結點選事件
    mounted () {
      // 為圖片ICON繫結事件 getModule 為編輯器的內部屬性
    //   console.log(this.$refs.QuillEditor.quill)
      this.$refs.QuillEditor.quill.getModule('toolbar').addHandler('image', this.imgHandler)
      this.$refs.QuillEditor.quill.getModule('toolbar').addHandler('video', this.videoHandler) // 為視訊ICON繫結事件
      this.content = this.quillData

      let that = this
      setTimeout(function(){
        // console.log(that.quillData)
        that.content = that.quillData
      },200)
    }
}
</script>

四、引入富文字元件,listEditQuery.rule是我這邊編輯功能時需要的欄位。

        這裡需要獲取富文字穿給父元件的值(@change-content="listenToChild"),通過此方法獲取

<!-- 引入富文字編輯器 -->
<quill-editor @change-content="listenToChild" v-if="flag" :quillData="listEditQuery.rule"></quill-editor>
import quillEditor from '@/components/Quilleditor'   //這裡根據自己元件所放位置配置
import { ImportDetail } from '@/api/manage/***'

export default {
    data(){
        return{
            listEditQuery:{},
            flag:false  //在父元件定義一個flag,當資料獲得的之後再進行子元件的渲染
        }
    }
    components: {
      quillEditor
    },
    methods: {
      getList(){
        this.listLoading = true
        ImportDetail(this.listQuery).then(response => {
          this.listLoading = false
          this.listEditQuery = response.data 
          this.flag = true
 
        }).catch(err => {
          console.log(err, '沒有資料1')
          this.tableData = []
          this.listLoading = false
        })
        
      },  
      //富文字 賽事章程
      listenToChild(val){
        this.listEditQuery .rule = val
        // console.log(this.listEditQuery.rule)
      }
    },

    mounted () {
      this.getList()
    }
}

相關推薦

SSM整合文字編輯editormd、常用Api、圖片、回顯

前言: 幾天前,集成了百度的ueditor,感覺不符合現代前端的審美邏輯,並且肥胖,pass了,偶然發現editormd,覺得美滋滋,一路踩坑下來,特此記錄 editormd:支援 AMD / CMD 模組化載入(支援 Require.js & Se

vue使用vue-quill-editor文字編輯定義toolbar修改工具欄options

基於webpack和vue 一、npm 安裝 vue-quill-editor 二、在main.js中引入 import VueQuillEditor from 'vue-quill-editor' // require styles 引入樣式 im

vue使用vue-quill-editor文字編輯定義toolbar圖片

一、npm 安裝 vue-quill-editor  二、在main.js中引入 import VueQuillEditor from 'vue-quill-editor' // require styles 引入樣式 import 'quill/dist/quill.c

Vuequill-editor文字編輯元件的運用與修改配置使圖片到伺服器

前言:Vue的生態已經越來越繁榮,越來越多有趣好用的元件加入的生態中了。quill-editor富文字編輯器就是很好用的元件之一。 一、quill-editor的安裝與使用 ①、安裝 npm install vue-quill-editor --save ②、

Vue +Element UI +vue-quill-editor 文字編輯及插入圖片定義

1.安裝npm install vue-quill-editor --save2.在main.js中引入import VueQuillEditor from 'vue-quill-editor' im

Vue基於vue-quill-editor文字編輯使用心得

vue-quill-editor的guthub地址,現在市面上有很多的富文字編輯器,我個人還是非常推薦Vue自己家的vue-quill-deitor,雖然說只支援IE10+,但這種問題,帥給別人吧! 那麼我們直擊正題,在vue中使用quill呢,我們需要npm進行安裝,安裝命令如下: npm ins

vue 整合ueditor(百度文字編輯)以及使用後端Java圖片到伺服器特別注意的大坑

    1.import 引入ueditor時,在封裝元件中引入,不要在mian.js內引入,在main.js內引入會造成 1.Uncaught SyntaxError: Unexpected token : 這種錯誤,屬於是跨域問題,目前不清楚是什麼原因和原理,

文字編輯UEditor定義工具欄(一、基礎配置與字型、背景色、行間距、超連結實現)

導讀:UEditor 是由百度「FEX前端研發團隊」開發的所見即所得富文字web編輯器,功能強大,可定製,是一款優秀的國產線上富文字編輯器,編輯器內可插入圖片、音訊、視訊等。 一、UEditor自定義工具欄效果圖如下: 二、UEditor富文字編輯器環境搭建及專案引用 環境搭建不再贅述,請自行查閱或者參考以

Vue專案使用quill-editor帶樣式編輯(更改插入圖片和視訊) 運用vue-quilt-editor編寫文字編輯 定義圖片路徑 獲取後臺返回路徑

一、首先在main.js  引入 vue-quilt-editorimport VueQuillEditor from 'vue-quill-editor'import 'quill/dist/quill.core.css'import 'quill/dist/quill.s

element-ui vue-quill-editor 文字編輯定義圖片插入

前言 因為使用者需要編輯自定義頁面,這裡就要用到富文字編輯框,可以插入圖片插入視訊。我選擇了vue-quill-editor。然後問題來了,現實需求和引入的框架衝突。 問題引入 vue-quill-editor預設的圖片插入方式,是直接將圖

vue使用editor文字編輯

   最近公司系統要換成前後端分離的,前端採用vue框架,而我負責的模組剛好有富文字編輯器,查了好幾種編輯器,最後還是決定用ueditor 百度編輯器目錄結構:  將config.json檔案放在conf下:修改獲取config.json的路徑地址 controller類獲取

vue整合百度UEditor文字編輯使用教程

在前端開發的專案中,難免會遇到需要在頁面上整合一個富文字編輯器。那麼,如果你有這個需求,希望可以幫助到你。 vue是前端開發者所追捧的框架,簡單易上手,但是基於vue的富文字編輯器大多數太過於精簡。於是我將百度富文字編輯器放到vue專案中使用。效果圖如下 前端精品教程:百度網盤下載 廢話不多說。

vue整合百度UEditor文字編輯

在前端開發的專案中。難免會遇到需要在頁面上整合一個富文字編輯器。那麼。如果你有這個需求。希望可以幫助到你 vue是前端開發者所追捧的框架,簡單易上手,但是基於vue的富文字編輯器大多數太過於精簡。於是我將百度富文字編輯器放到vue專案中使用。效果圖如下 廢話

Pythonmysql資料庫儲存文字編輯的內容

使用python 模組MySQLdb自帶的針對mysql的字元轉義函式 escape_string """insert into csdn_test(message) VALUES("%s");""" % (pymysql.escape_string(item['content']))

angularjs簡單使用kindeditor文字編輯

如何在angularjs中快速使用kindeditor富文字編輯器 ? 先引入相關的css樣式和js檔案: <!-- 富文字編輯器 --> <link rel="stylesheet" href="../plugins/kindedit

ssm+maven專案加入“百度文字編輯實現圖片

1.在UEditor官方下載編輯器。2.解壓壓縮檔案到資料夾,因為預設的資料夾名字過長,建議重新命名一下資料夾名,我這裡命名為ueditor資料夾中對應的目錄為3.將整個資料夾copy到專案webapp目錄下,(我這裡用的是IDEA,不知道什麼原因直接往IDEA開啟的專案裡拷

【在MVC應用百度文字編輯

1.下載.NET版本的百度富文字編輯器,前往 下載.NET版本百度富文字框  2.解壓下載的.zip壓縮包,將utf8-.net資料夾名稱改為:ueditor,複製到MVC根目錄下面。結構如下: App_Code 上的檔案是應用程式的原始碼 Config.cs 負

react 0.14使用百度文字編輯

2017年12月01日 15:59:33 lz101281 閱讀數:1293 標籤: ie 8 語言

使用百度editor 文字編輯圖片

在jsp 檔案中 <img src="F:/upload/image/test.jpg"/> 這樣是引不到圖片的。因為,JSP頁面在引圖片的時候是 在頁面解析的路徑是:<img src="http://localhost:8080/upload/images/test.jpg">。也就

python web.py使用百度文字編輯 UEditor

原文連結 http://flask123.sinaapp.com/article/47/UEditor簡介UEditor是由百度「FEX前端研發團隊」開發的所見即所得富文字web編輯器,具有輕量,可定製,注重使用者體驗等特點,開源基於MIT協議,允許自由使用和修改程式碼。由於