Vue項目中quill-editor帶樣式編輯器的使用方法,vuequill-editor

來源:互聯網
上載者:User

Vue項目中quill-editor帶樣式編輯器的使用方法,vuequill-editor

vue-quill-editor預設插入圖片是直接將圖片轉為base64再放入內容中,如果圖片比較大的話,富文本的內容就會很大。

插入視頻是直接彈框輸入URL地址,某些需求下我們需要讓使用者去本地選擇自己的視頻,我們可以通過vue-quill-editor內部的某些方法變更

該方法使用了 element-ui 和 檔案上傳七牛

一、npm 安裝 vue-quill-editor

二、在main.js中引入

import VueQuillEditor from 'vue-quill-editor'Vue.use(VueQuillEditor)
 

HTML部分:為編輯器綁定各個API事件,定義一個隱藏的input框,用於點擊圖片或者視頻表徵圖上傳檔案

<template> <div> <!-- quill-editor外掛程式標籤 分別綁定各個事件--> <quill-editor v-model="content" ref="myQuillEditor" :options="editorOption" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)"  @change="onEditorChange($event)"> </quill-editor> <div class="limit">當前已輸入 <span>{{nowLength}}</span> 個字元,您還可以輸入 <span>{{SurplusLength}}</span> 個字元。</div> <!-- 檔案上傳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" v-loading.fullscreen.lock="fullscreenLoading" element-loading-text="插入中,請稍候">點擊上傳</el-button> </el-upload> </el-table> </div></template>

CSS部分:

.quill-editor { height: 745px; .ql-container { height: 680px; }}.limit { height: 30px; border: 1px solid #ccc; line-height: 30px; text-align: right; span { color: #ee2a7b; }}.ql-snow .ql-editor img { max-width: 480px;}.ql-editor .ql-video { max-width: 480px;}

 JS部分:

import Vue from 'util/vueExt'import { Component } from 'vue-property-decorator'import * as Template from './editor.vue'import * as Quill from 'quill' // 引入編輯器const STATICDOMAIN = '//ss.yidejia.com/'const STATVIDEO = '//flv.yidejia.com/'@Component({ mixins: [Template]})export default class Editor extends Vue { content = '' // 文章內容 editorOption = {} // 編輯器選項 addRange: any = new Array() uploadData = {} photoUrl = ''   // 上傳圖片地址 uploadType = '' // 上傳的檔案類型(圖片、視頻) fullscreenLoading = false $refs: { myQuillEditor: any, imgInput: any } get nowLength() { return this.content.length } get SurplusLength() { // 計算屬性 獲得當前輸入字元長度 let num = 10000 - Number(this.content.length) if (num > 0) {  return num } else {  return 0 } } // 上傳七牛的actiond地址 get qnLocation() { if (location.protocol === 'http:') {  return 'http://up-z0.qiniu.com' } return 'https://up-z0.qbox.me' } // 圖片上傳前獲得資料token資料 qnUpload(file) { this.fullscreenLoading = true const suffix = file.name.split('.') const ext = suffix.splice(suffix.length - 1, 1)[0] console.log(this.uploadType) if (this.uploadType === 'image') { // 如果是點擊插入圖片  return this.api.getQNToken().then(res => {  this.uploadData = {   key: `image/${suffix.join('.')}_${new Date().getTime()}.${ext}`,   token: res  }  }) } else if (this.uploadType === 'video') { // 如果是點擊插入視頻  return this.api.getVideoQNToken().then(res => {  this.uploadData = {   key: `video/${suffix.join('.')}_${new Date().getTime()}.${ext}`,   token: res  }  }) } } // 圖片上傳之前調取的函數 beforeUpload(file) { return this.qnUpload(file) } // 圖片上傳成功回調 插入到編輯器中 upScuccess(e, file, fileList) { this.fullscreenLoading = false let vm = this let url = '' if (this.uploadType === 'image') { // 獲得檔案上傳後的URL地址  url = STATICDOMAIN + e.key } else if (this.uploadType === 'video') {  url = STATVIDEO + e.key } if (url != null && url.length > 0) { // 將檔案上傳後的URL地址插入到編輯器文本中  let value = url  vm.addRange = vm.$refs.myQuillEditor.quill.getSelection()  value = value.indexOf('http') !== -1 ? value : 'http:' + value  vm.$refs.myQuillEditor.quill.insertEmbed(vm.addRange !== null ? vm.addRange.index : 0, vm.uploadType, value, Quill.sources.USER) // 調用編輯器的 insertEmbed 方法,插入URL } else {  (<any>this).$message.error(`${vm.uploadType}插入失敗`) } this.$refs['upload'].clearFiles() // 插入成功後清除input的內容 } // 點擊圖片ICON觸發事件 imgHandler(state) { this.addRange = this.$refs.myQuillEditor.quill.getSelection() if (state) {  let fileInput = document.getElementById('imgInput')  fileInput.click() // 加一個觸發事件 } this.uploadType = 'image' } // 點擊視頻ICON觸發事件 videoHandler(state) { this.addRange = this.$refs.myQuillEditor.quill.getSelection() if (state) {  let fileInput = document.getElementById('imgInput')  fileInput.click() // 加一個觸發事件 } this.uploadType = 'video' } // 編輯器游標離開 將編輯器內容發射給父組件 onEditorBlur(editor) { this.$emit('getValue', this.content) } // 編輯器獲得游標 onEditorFocus(editor) { editor.enable(true) // 實現達到上限字元可刪除 } // 編輯器文本發生變化 onEditorChange({ editor, html, text }) { let textLength = text.length if (textLength > 10000) {  (<any>this).$message.error('最多輸入10000個字元')  editor.enable(false) } this.$emit('getValue', this.content) } // 清除編輯器內容 callMethod() { this.content = '' } // 頁面載入後執行 為編輯器的圖片表徵圖和視頻表徵圖綁定點擊事件 mounted() { // 為圖片ICON綁定事件 getModule 為編輯器的內部屬性 this.$refs.myQuillEditor.quill.getModule('toolbar').addHandler('image', this.imgHandler) this.$refs.myQuillEditor.quill.getModule('toolbar').addHandler('video', this.videoHandler) // 為視頻ICON綁定事件 }}

相關參考連結:

vue-quill-editor實現圖片上傳功能

vue-quill-editor API文檔地址

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.