npm install vue-quill-editor --save
在全域性中引入
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, /* { 預設全域性 } */)
在指定的 vue 檔案中引入
// 引入樣式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
import { quillEditor } from 'vue-quill-editor'
export default {
components: {
quillEditor
}
}
<template>
<quill-editor
v-model="content"
ref="myQuillEditor"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@change="onEditorChange($event)">
</quill-editor>
</template>
<script>
export default {
data() {
return {
content: `<p>這是 vue-quill-editor 的內容!</p>`, //雙向資料繫結資料
editorOption: {}, //編輯器設定項
}
},
methods: {
onEditorBlur() {}, // 失去焦點觸發事件
onEditorFocus() {}, // 獲得焦點觸發事件
onEditorChange() {}, // 內容改變觸發事件
}
}
</script>
到這裡一個預設的富文字編輯器已經匯入使用了,如下圖所視!
一般的,我們在使用的時候並不需要這麼多功能,可以適當的對編輯器設定項進行設定。
editorOption: {
modules:{
toolbar: [
['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'] //上傳圖片、上傳視訊
]
},
placeholder: "輸入內容..."
}, //編輯器設定項
可以根據自己的實際需求,保留相應的工具列。
vue-quill-editor 預設的是以 base64 儲存圖片,會直接把圖片 base64 和內容文字一起以字串的形式提交到後端。這樣小圖片還行,如果要上傳大圖片會提示上傳失敗,優秀的前端打字員顯然不會這樣做。
editorOption: {
modules: {
toolbar: {
container: toolbarOptions, // 工具列
handlers: {
'image': function(value) {
if (value) {
alert('點選了上傳圖片')
} else {
this.quill.format('image', false);
}
}
}
}
placeholder: "輸入內容..."
}, //編輯器設定項
},
<Upload
:show-upload-list="false"
:on-success="handleSuccess"
:format="['jpg','jpeg','png','gif']"
:max-size="2048"
multiple
action="/file/upload"
>
</Upload>
<quill-editor
v-model="content"
:options="editorOption"
ref="quillEditor">
</quill-editor>
.ivu-upload {
display: none;
}
data () {
return {
content: '',
editorOption: {
modules: {
toolbar: {
container: toolbarOptions, // 工具列
handlers: {
'image': function (value) {
if (value) {
// 呼叫iview圖片上傳
document.querySelector('.ivu-upload .ivu-btn').click()
} else {
this.quill.format('image', false);
}
}
}
}
}
}
}
},
methods: {
handleSuccess (res) {
// 獲取富文字元件範例
let quill = this.$refs.myQuillEditor.quill
// 如果上傳成功返回圖片URL
if (res) {
// 獲取遊標所在位置
let length = quill.getSelection().index;
// 插入圖片,res為伺服器返回的圖片連結地址
quill.insertEmbed(length, 'image', res)
// 調整遊標到最後
quill.setSelection(length + 1)
} else {
// 提示資訊,需引入Message
Message.error('圖片插入失敗')
}
},
}
這樣就完成了圖片上傳的功能。
1.在原本的quill-editor能正常使用的情況下,安裝quill-image-drop-module和quill-image-resize-module
npm install quill-image-drop-module -S
npm install quill-image-resize-module -S
2.我是在全域性註冊的quill-editor,在main.js中加入以下程式碼
//富文字編輯器
import VueQuillEditor, { Quill } from 'vue-quill-editor';
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
import imageResize from 'quill-image-resize-module' // 調整大小元件。
import { ImageDrop } from 'quill-image-drop-module'; // 拖動載入圖片元件。
Quill.register('modules/imageResize', imageResize );
Quill.register('modules/imageDrop', ImageDrop);
Vue.use(VueQuillEditor);
3.在 editorOption 中新增設定 在modules中與 history/toolbar平級
imageDrop: true, //圖片拖拽
imageResize: { //放大縮小
displayStyles: {
backgroundColor: "black",
border: "none",
color: "white"
},
modules: ["Resize", "DisplaySize", "Toolbar"]
},
4.在專案檔案 vue.config.js 加上設定。(這一步很重要,如果不設定會報錯!)
const webpack = require('webpack'); //匯入 webpack 模組
//在模組中加入
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
'window.Quill': 'quill/dist/quill.js',
'Quill': 'quill/dist/quill.js'
})
],
},
這樣就匯入完成了,如下圖所示