日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談vue中使用編輯器vue-quill-editor踩過的坑

瀏覽:184日期:2022-12-19 11:37:48

結合vue+element-ui+vue-quill+editor二次封裝成組件

1.圖片上傳

分析原因

項目中使用vue-quill-editor富文本編輯器,在編輯內容的時候,我們往往會編輯圖片,而vue-quill-editor默認的處理方式是直接將圖片轉成base64格式,導致上傳的內容十分龐大,且服務器接受post的數據的大小是有限制的,很有可能就提交失敗,造成用戶體驗差。

引入element-ui

編輯editor.vue文件

<template> <div> <!-- 圖片上傳組件輔助--> <el-upload action='' accept='image/jpg, image/jpeg, image/png, image/gif' :http-request='upload' :before-upload='beforeUploadImg' :on-success='uploadSuccess' :on-error='uploadError' :show-file-list='false'> <i class='el-icon-plus avatar-uploader-icon'></i> </el-upload> </div></template><script> import axios from ’@/API/’;import { quillEditor } from 'vue-quill-editor';import COS from 'cos-js-sdk-v5';import Upload from ’@/components/Upload.vue’;import { addQuillTitle } from ’../utils/quill-title.js’;import 'quill/dist/quill.core.css';import 'quill/dist/quill.snow.css';import 'quill/dist/quill.bubble.css'; export default { data() { return { } }, methods: { // 上傳圖片前 beforeUpload(res, file) { const isJPG = file.type === ’image/jpg’ || file.type === ’image/png’ || file.type === ’image/jpeg’ const isLt1M = file.size / 1024 / 1024 < 1 if (!isJPG) { this.$message.error(’支持JPG、PNG格式的圖片,大小不得超過1M’) } if (!isLt1M) { this.$message.error(’文件最大不得超過1M’) } return isJPG && isLt1M }, // 上傳圖片成功 uploadSuccess(res, file) {}, // 上傳圖片失敗 uploadError(res, file) {}, // 上傳圖片處理過程 upload(req){} } }</script>

在editor.vue中引入vue-quill-editor

<template> <div> <!-- 圖片上傳組件輔助--> <el-upload action='' accept='image/jpg, image/jpeg, image/png, image/gif' :http-request='upload' :before-upload='beforeUploadImg' :on-success='uploadSuccess' :on-error='uploadError' :show-file-list='false'> <i class='el-icon-plus avatar-uploader-icon'></i> </el-upload> <quill-editor v-model='content' ref='QuillEditor' :options='editorOption' @blur='onEditorBlur($event)' @focus='onEditorFocus($event)' @ready='onEditorReady($event)'> </quill-editor> </div></template><script> import axios from ’@/API/’;import { quillEditor } from 'vue-quill-editor';import COS from 'cos-js-sdk-v5';import Upload from ’@/components/Upload.vue’;import { addQuillTitle } from ’../utils/quill-title.js’;import 'quill/dist/quill.core.css';import 'quill/dist/quill.snow.css';import 'quill/dist/quill.bubble.css'; // 工具欄配置 const toolbarOptions = [ [’bold’, ’italic’, ’underline’, ’strike’], // toggled buttons [’blockquote’, ’code-block’], [{’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’: []}], [’link’, ’image’, ’video’], [’clean’] // remove formatting button] export default { data() { return { editorOption: { placeholder: ’請輸入編輯內容’, theme: ’snow’, //主題風格 modules: { toolbar: { container: toolbarOptions, // 工具欄 handlers: { ’image’: function (value) { if (value) { document.querySelector(’#quill-upload input’).click() } else { this.quill.format(’image’, false); } } } } } }, // 富文本編輯器配置 content: ’’, //富文本內容 } }, methods: { // 上傳圖片前 beforeUpload(res, file) { const isJPG = file.type === ’image/jpg’ || file.type === ’image/png’ || file.type === ’image/jpeg’ const isLt1M = file.size / 1024 / 1024 < 1 if (!isJPG) { this.$message.error(’支持JPG、PNG格式的圖片,大小不得超過1M’) } if (!isLt1M) { this.$message.error(’文件最大不得超過1M’) } return isJPG && isLt1M }, // 上傳圖片成功 uploadSuccess(res, file) { let quill = this.$refs.QuillEditor.quill; let length = quill.getSelection().index; quill.insertEmbed(length, ’image’, url); quill.setSelection(length+1) }, // 上傳圖片失敗 uploadError(res, file) {this.$message.error(’圖片插入失敗’) }, // 上傳圖片處理過程 upload(req){} } }</script><style scoped>.avatar-uploader{display: none;}</style>

2.編輯器上增加title提示

在編輯器上增加一個quill-title.js的工具欄的title的配置文件

const titleConfig = { ’ql-bold’:’加粗’, ’ql-color’:’字體顏色’, ’ql-font’:’字體’, ’ql-code’:’插入代碼’, ’ql-italic’:’斜體’, ’ql-link’:’添加鏈接’, ’ql-background’:’背景顏色’, ’ql-size’:’字體大小’, ’ql-strike’:’刪除線’, ’ql-script’:’上標/下標’, ’ql-underline’:’下劃線’, ’ql-blockquote’:’引用’, ’ql-header’:’標題’, ’ql-indent’:’縮進’, ’ql-list’:’列表’, ’ql-align’:’文本對齊’, ’ql-direction’:’文本方向’, ’ql-code-block’:’代碼塊’, ’ql-formula’:’公式’, ’ql-image’:’圖片’, ’ql-video’:’視頻’, ’ql-clean’:’清除字體樣式’};export function addQuillTitle(){ const oToolBar = document.querySelector(’.ql-toolbar’), aButton = oToolBar.querySelectorAll(’button’), aSelect = oToolBar.querySelectorAll(’select’), aSpan= oToolBar.querySelectorAll(’span’); aButton.forEach((item)=>{ if(item.className === ’ql-script’){ item.value === ’sub’ ? item.title = ’下標’: item.title = ’上標’; }else if(item.className === ’ql-indent’){ item.value === ’+1’ ? item.title =’向右縮進’: item.title =’向左縮進’; }else if(item.className === ’ql-list’){ item.value===’ordered’ ? item.title=’有序列表’ : item.title=’無序列表’ }else if(item.className === ’ql-header’){ item.value === ’1’ ? item.title = ’標題H1’: item.title = ’標題H2’; }else{ item.title = titleConfig[item.classList[0]]; } }); aSelect.forEach((item)=>{ if(item.className!=’ql-color’&&item.className!=’ql-background’){ item.parentNode.title = titleConfig[item.classList[0]]; } }); aSpan.forEach((item)=>{ if(item.classList[0]===’ql-color’){ item.title = titleConfig[item.classList[0]]; }else if(item.classList[0]===’ql-background’){ item.title = titleConfig[item.classList[0]]; } });}

在editor.vue中引入quill-title.js

<template> <div> <!-- 圖片上傳組件輔助--> <el-upload action='' accept='image/jpg, image/jpeg, image/png, image/gif' :http-request='upload' :before-upload='beforeUploadImg' :on-success='uploadSuccess' :on-error='uploadError' :show-file-list='false'> <i class='el-icon-plus avatar-uploader-icon'></i> </el-upload> <quill-editor v-model='content' ref='QuillEditor' :options='editorOption' @blur='onEditorBlur($event)' @focus='onEditorFocus($event)' @ready='onEditorReady($event)'> </quill-editor> </div></template><script> import axios from ’@/API/’;import { quillEditor } from 'vue-quill-editor';import COS from 'cos-js-sdk-v5';import Upload from ’@/components/Upload.vue’;import { addQuillTitle } from ’../utils/quill-title.js’;import 'quill/dist/quill.core.css';import 'quill/dist/quill.snow.css';import 'quill/dist/quill.bubble.css'; // 工具欄配置 const toolbarOptions = [ [’bold’, ’italic’, ’underline’, ’strike’], // toggled buttons [’blockquote’, ’code-block’], [{’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’: []}], [’link’, ’image’, ’video’], [’clean’] // remove formatting button] export default { data() { return { editorOption: { placeholder: ’請輸入編輯內容’, theme: ’snow’, //主題風格 modules: { toolbar: { container: toolbarOptions, // 工具欄 handlers: { ’image’: function (value) { if (value) { document.querySelector(’#quill-upload input’).click() } else { this.quill.format(’image’, false); } } } } } }, // 富文本編輯器配置 content: ’’, //富文本內容 } }, mounted(){ addQuillTitle(); }, methods: { // 上傳圖片前 beforeUpload(res, file) { const isJPG = file.type === ’image/jpg’ || file.type === ’image/png’ || file.type === ’image/jpeg’ const isLt1M = file.size / 1024 / 1024 < 1 if (!isJPG) { this.$message.error(’支持JPG、PNG格式的圖片,大小不得超過1M’) } if (!isLt1M) { this.$message.error(’文件最大不得超過1M’) } return isJPG && isLt1M }, // 上傳圖片成功 uploadSuccess(res, file) { let quill = this.$refs.QuillEditor.quill; let length = quill.getSelection().index; quill.insertEmbed(length, ’image’, url); quill.setSelection(length+1) }, // 上傳圖片失敗 uploadError(res, file) {this.$message.error(’圖片插入失敗’) }, // 上傳圖片處理過程 upload(req){} } }</script><style scoped>.avatar-uploader{display: none;}</style>

補充知識:Vue引用quill富文本編輯器,圖片處理的兩個神器插件(quill-image-drop-module、quill-image-resize-module)的正確姿勢。(解決各種報錯)

一、前言

我在vue-quill-editor的Github認識了這兩個插件。

quill-image-drop-module:允許粘貼圖像并將其拖放到編輯器中。

quill-image-resize-module:允許調整圖像大小。

都很實用吶!

然而DEMO不夠詳細,實際引用時,報了很多錯誤。

Cannot read property ’imports’ of undefined'、

Failed to mount component: template or render function not defined.、

Cannot read property ’register’ of undefined。

下面說一下正確的引用姿勢。

二、我的環境

Webpack + Vue-Cli 2.0 (vue init非simple的版本)

三、正文

1、確保你的quill富文本編輯器(不添加插件時)可以正常運行。

2、安裝NPM依賴。

cnpm install quill-image-drop-module -S

cnpm install quill-image-resize-module -S

3、在build文件夾下找到webpack.base.conf.js。

修改:

module.exports = { plugins: [ new webpack.ProvidePlugin({ // 在這兒添加下面兩行 ’window.Quill’: ’quill/dist/quill.js’, ’Quill’: ’quill/dist/quill.js’ }) ]}

4、修改你在頁面引用的“quill富文本組件”。

修改<script>標簽內代碼:

// 以前需要有下面幾行: import { quillEditor } from ’vue-quill-editor’ //注意quillEditor必須加大括號,否則報錯。 import 'quill/dist/quill.core.css';// import 'quill/dist/quill.snow.css'; // 新增下面代碼: import resizeImage from ’quill-image-resize-module’ // 調整大小組件。 import { ImageDrop } from ’quill-image-drop-module’; // 拖動加載圖片組件。 Quill.register(’modules/imageDrop’, ImageDrop); Quill.register(’modules/resizeImage ’, resizeImage )

然后,修改頁面引用的:options='editorOption'。

editorOption: { modules: { // 新增下面 imageDrop: true, // 拖動加載圖片組件。 imageResize: { //調整大小組件。 displayStyles: { backgroundColor: ’black’, border: ’none’, color: ’white’ }, modules: [ ’Resize’, ’DisplaySize’, ’Toolbar’ ] } }}

重新 npm run dev ,插件運行成功!

以上這篇淺談vue中使用編輯器vue-quill-editor踩過的坑就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美69| 日韩成人亚洲| 一区二区高清| 中文字幕视频精品一区二区三区| 午夜日本精品| 蜜臀久久99精品久久久久宅男| 男女精品网站| 日韩手机在线| 美女视频免费精品| 日本不良网站在线观看| 999国产精品视频| 国产一区导航| 国产亚洲久久| 一区二区三区四区日本视频| 精品91福利视频| 日本在线啊啊| 黄色在线一区| 国产欧美日韩一区二区三区四区 | 老鸭窝亚洲一区二区三区| 麻豆久久精品| 国产劲爆久久| 日韩亚洲国产欧美| 在线精品福利| 国产一区二区三区黄网站| 99精品综合| 911亚洲精品| 久久婷婷亚洲| 国产日韩精品视频一区二区三区| 国产精品99一区二区三区| 亚洲欧美视频| 美女福利一区二区三区| 免费在线观看成人| 色偷偷色偷偷色偷偷在线视频| 玖玖精品视频| 欧美一区二区三区激情视频| 国产精品一级在线观看| 香蕉久久久久久久av网站| 麻豆91精品视频| 国产精品毛片在线| 亚洲风情在线资源| 国产精品一区二区三区av| 亚洲免费影视| 91精品国产调教在线观看 | 在线手机中文字幕| 奇米狠狠一区二区三区| av不卡免费看| 国产综合亚洲精品一区二| 精品视频高潮| 日韩高清在线观看一区二区| 午夜国产精品视频| 一区二区三区四区日本视频| 国产精品3区| 国产欧美一区二区精品久久久| 蜜桃久久精品一区二区| 99国内精品| 亚洲精品99| 国产精品嫩草99av在线| 不卡在线一区二区| 亚洲美洲欧洲综合国产一区| 成人精品中文字幕| 九色porny丨国产首页在线| 日本不良网站在线观看| 日本精品在线中文字幕| 激情欧美国产欧美| 日韩一级网站| av不卡在线| 综合一区在线| 国产激情一区| 激情国产在线| 国产婷婷精品| 日本不卡视频在线观看| 国产精品3区| 亚洲伦乱视频| 自拍自偷一区二区三区| 国产精品视频一区二区三区四蜜臂 | av在线资源| 久久夜夜操妹子| 亚洲在线免费| 国产极品模特精品一二| 精品欧美视频| 久久国产亚洲| 日韩一区二区三区精品视频第3页| 国产日韩亚洲| 欧美sss在线视频| 亚洲深深色噜噜狠狠爱网站| 欧美精品影院| 91精品一区二区三区综合| 亚洲精品九九| zzzwww在线看片免费| 日韩中文字幕av电影| 久久影院资源站| 视频一区国产视频| 97在线精品| 日本欧美一区二区在线观看| 麻豆精品蜜桃视频网站| 夜久久久久久| 天堂8中文在线最新版在线| 亚洲欧美网站在线观看| 久久高清免费| 久久久免费人体| 日本精品另类| 中文精品视频| 久久久夜精品| 欧美成人一二区| 亚洲婷婷丁香| 99国产一区| 日韩精品欧美激情一区二区| 国产精品一区三区在线观看| 蜜芽一区二区三区| 日韩av首页| 亚洲天堂av影院| 色欧美自拍视频| 久久精品亚洲| 日本欧美一区二区在线观看| 亚洲伊人影院| 日韩专区在线视频| 在线观看视频免费一区二区三区| 欧美色图国产精品| 日韩精品一区二区三区免费观影 | 成人一区而且| 日产精品一区二区| 国内精品亚洲| 日韩伦理一区| 88xx成人免费观看视频库| 日韩在线不卡| 久久国产日本精品| 欧美日韩精品在线一区| 日韩欧美一区二区三区在线观看| 97精品国产一区二区三区| 电影91久久久| 欧美日韩在线网站| 欧美特黄一级大片| 日韩天堂av| 日韩国产精品久久久| 免费成人性网站| 国产欧美日韩一区二区三区四区 | 在线午夜精品| 亚洲精品伊人| 国产精品自拍区| 久久精品国产99国产| 天堂8中文在线最新版在线| 欧美性感美女一区二区| 国产精品普通话对白| 亚洲精品免费观看| 国产精品www.| 婷婷激情一区| 精品91久久久久| 亚洲欧美久久| 国产精品99久久久久久董美香| 国产资源在线观看入口av| 91精品电影| 欧美精品二区| 九九在线精品| 免费日韩成人| 老牛影视一区二区三区| 国产精品v亚洲精品v日韩精品| 亚洲国产欧美日本视频| 在线综合亚洲| 国产美女亚洲精品7777| 激情五月色综合国产精品| 日本成人在线视频网站| 久久一区二区中文字幕| 日av在线不卡| xxxxx性欧美特大| 日本三级亚洲精品| 午夜精品一区二区三区国产| 久久尤物视频| 天堂精品久久久久| 欧美日韩高清| 水蜜桃精品av一区二区| 日本a口亚洲| 蜜桃久久精品一区二区| 激情欧美丁香| 日韩精品欧美| 久久精品伊人| 国产欧美日韩在线观看视频| 国产亚洲在线观看| 国产精品久久久久久久免费观看| 日韩高清一区二区| 国产视频一区在线观看一区免费| 日产精品一区二区| 久久福利在线| 久久国产婷婷国产香蕉| 国产一区导航| 成人va天堂| 久久精品中文| 久久视频精品| av一区在线| 四虎884aa成人精品最新| av免费不卡国产观看| 高清av一区| 麻豆视频在线看| 欧美精品国产一区| 91精品丝袜国产高跟在线| 亚洲激情av| 中文字幕日韩亚洲| 日韩精品免费视频人成| 91成人在线精品视频| 久久精品99国产精品| 国产日韩欧美一区|