改造vue-quill-editor: 結合element-ui上傳圖片到服務器
quill-image-extend-module
vue-quill-editor的增強模塊,
功能:
- 提供圖片上傳到服務器的功能
- 復制插入
- 拖拽插入
- 顯示上傳進度
- 顯示上傳成功或者失敗
- 支持與其他模塊一起使用(例如調整圖片大小)
Install
npm install quill-image-extend-module --save-dev
use
import {quillEditor, Quill} from 'vue-quill-editor'
import {container, ImageExtend} from 'quill-image-extend-module'
Quill.register('modules/ImageExtend', ImageExtend)
example
<template>
<div class="quill-wrap">
<quill-editor
v-model="content"
ref="myQuillEditor"
:options="editorOption"
>
</quill-editor>
</div>
</template>
<script>
import {quillEditor, Quill} from 'vue-quill-editor'
import {container, ImageExtend} from 'quill-image-extend-module'
Quill.register('modules/ImageExtend', ImageExtend)
export default {
components: {quillEditor},
data() {
return {
content: '',
// 富文本框參數設置
editorOption: {
modules: {
ImageExtend: {
loading: true,
name: 'img',
action: updateUrl,
response: (res) => {
return res.info
}
},
toolbar: {
container: container,
handlers: {
'image': function () {
document.querySelector('.quill-image-input').click()
}
}
}
}
}
}
}
}
</script>
quill-image-extend-module 的所有可配置項
editorOption: {
modules: {
ImageExtend: {
loading: true, // 可選參數 是否顯示上傳進度和提示語
name: 'img', // 圖片參數名
size: 3, // 可選參數 圖片大小,單位為M,1M = 1024kb
action: updateUrl, // 服務器地址, 如果action為空,則采用base64插入圖片
// response 為一個函數用來獲取服務器返回的具體圖片地址
// 例如服務器返回{code: 200; data:{ url: 'baidu.com'}}
// 則 return res.data.url
response: (res) => {
return res.info
},
headers: (xhr) => {}, // 可選參數 設置請求頭部
start: () => {}, // 可選參數 自定義開始上傳觸發事件
end: () => {}, // 可選參數 自定義上傳結束觸發的事件,無論成功或者失敗
error: () => {}, // 可選參數 自定義網絡錯誤觸發的事件
change: (xhr, formData) => {} // 可選參數 選擇圖片觸發,也可用來設置頭部,但比headers多了一個參數,可設置formData
},
toolbar: {
container: container, // container為工具欄,此次引入了全部工具欄,也可自行配置
handlers: {
'image': function () { // 劫持原來的圖片點擊按鈕事件
document.querySelector('.quill-image-input').click()
}
}
}
}
}
注意事項 (matters need attention)
由於不同的用戶的服務器返回的數據格式不盡相同
因此
在配置中,你必須如下操作
// 你必須把返回的數據中所包含的圖片地址 return 回去
respnse: (res) => {
return res.info // 這里切記要return回你的圖片地址
}
比如你的服務器返回的成功數據為
{
code: 200,
starus: true,
result: {
img: 'http://placehold.it/100x100' // 服務器返回的數據中的圖片的地址
}
}
那么你應該在參數中寫為:
// 你必須把返回的數據中所包含的圖片地址 return 回去
respnse: (res) => {
return res.result.img // 這里切記要return回你的圖片地址
}
與其他模塊一起使用(以resize-module為例子)
<template>
<div class="quill-wrap">
<quill-editor
v-model="content"
ref="myQuillEditor"
:options="editorOption"
>
</quill-editor>
</div>
</template>
<script>
import {quillEditor, Quill} from 'vue-quill-editor'
import {container, ImageExtend} from 'quill-image-extend-module'
import ImageResize from 'quill-image-resize-module'
Quill.register('modules/ImageExtend', ImageExtend)
// use resize module
Quill.register('modules/ImageResize', ImageResize)
export default {
components: {quillEditor},
data() {
return {
content: '',
// 富文本框參數設置
editorOption: {
modules: {
ImageResize: {},
ImageExtend: {
loading: true,
name: 'img',
size: 2, // 單位為M, 1M = 1024KB
action: updateUrl,
headers: (xhr) => {
},
response: (res) => {
return res.info
}
},
toolbar: {
container: container,
handlers: {
'image': function () {
document.querySelector('.quill-image-input').click()
}
}
}
}
}
}
}
}
</script>