按照一般官网的集成方案安装CKEditor5,需要vue的版本在3.x及以上才能使用,但是,由于博主目前使用的是vue2.6.10,所以这里介绍一种源码集成方案。注意,使用源码集成手脚架(vue/cli)必须要3.x及以上版本。

一、安装ckeditor基础框架、一些基础功能和主题:

npm install --save @ckeditor/ckeditor5-vue2 @ckeditor/ckeditor5-dev-webpack-plugin @ckeditor/ckeditor5-dev-utils postcss-loader@3 raw-loader@0.5.1
npm install --save @ckeditor/ckeditor5-editor-classic @ckeditor/ckeditor5-essentials @ckeditor/ckeditor5-basic-styles @ckeditor/ckeditor5-link @ckeditor/ckeditor5-paragraph @ckeditor/ckeditor5-theme-lark @ckeditor/ckeditor5-heading

二、在vue.config.js文件中添加配置相关信息:

const path = require('path');
const CKEditorWebpackPlugin = require('@ckeditor/ckeditor5-dev-webpack-plugin');
const {styles} = require('@ckeditor/ckeditor5-dev-utils');module.exports = {configureWebpack: {plugins: [new CKEditorWebpackPlugin({language: 'en',translationsOutputFile: /app/})]},transpileDependencies: [/ckeditor5-[^/\\]+[/\\]src[/\\].+\.js$/,],chainWebpack: config => {const svgRule = config.module.rule('svg');svgRule.exclude.add(path.join(__dirname, 'node_modules', '@ckeditor'));config.module.rule('cke-svg').test(/ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/).use('raw-loader').loader('raw-loader');config.module.rule('cke-css').test(/ckeditor5-[^/\\]+[/\\].+\.css$/).use('postcss-loader').loader('postcss-loader').tap(() => {return styles.getPostCssConfig({themeImporter: {themePath: require.resolve('@ckeditor/ckeditor5-theme-lark'),},minify: true});});},
};

三、在需要使用ckeditor5的vue文件中进行引入使用:

<template><div><ckeditor :editor="editor" v-model="editorData" :config="editorConfig"></ckeditor></div>
</template><script>
import CKEditor from '@ckeditor/ckeditor5-vue2'
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'
import BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'
import ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'
import LinkPlugin from '@ckeditor/ckeditor5-link/src/link'
import ParagraphPlugin from '@ckeditor/ckeditor5-paragraph/src/paragraph'
import Heading from '@ckeditor/ckeditor5-heading/src/heading'export default {components: {ckeditor: CKEditor.component},data() {return {editorData: '',editor: ClassicEditor,editorConfig: {placeholder: '请填写内容',plugins: [EssentialsPlugin,BoldPlugin,ItalicPlugin,LinkPlugin,ParagraphPlugin,Heading],toolbar: {items: ['heading','|','bold','italic','link','undo','redo']},heading: {options: [{model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph'},{model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1'},{model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2'},{model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3'}]}}};}
}
</script><style>/*编辑框最低高度*/.ck-editor__editable{min-height: 400px;}
</style>

四、自定义拓展功能:
功能列表有许多CKEditor5提供的功能,点击名字就能查到详细的功能和对应的demo,以Font功能为例子(classic中没有的功能):
①首先,找到font功能,点击进入

②进入后往下滑可以看到demo,点击进入

③进入后即可看到如何使用:

首先,安装:

npm install --save @ckeditor/ckeditor5-font

接着,在vue文件中引入:

import FontColor from '@ckeditor/ckeditor5-font/src/fontcolor'
import FontBackgroundColor from '@ckeditor/ckeditor5-font/src/fontbackgroundcolor'
import FontFamily from '@ckeditor/ckeditor5-font/src/fontfamily'
import FontSize from '@ckeditor/ckeditor5-font/src/fontsize'

并在plugins,toolbar中配置上,有一些可以自定义的配置:

plugins: [ FontColor, FontBackgroundColor, FontFamily, FontSize, .. ],
toolbar: [ 'fontFamily', 'fontSize', 'fontColor', 'fontBackgroundColor', ... ]

效果图:

五、实现大部分功能的自定义ckeditor5完整示例:
ckeditor5虽然可以自定义实现非常多的功能,但是在实现一些功能时,有未能实现预期效果的情况,比如:
①把ckeditor放在某个组件中时,工具栏宽度不够放下所有的工具栏项目,默认的它会显示“Show more items” (⋮) 的按钮,此时,将shouldNotGroupWhenFull设置为true,工具栏将停止对项目进行分组,并让它们在没有足够空间在单行中显示时换行到下一行。默认情况下为false,此设置启用项目分组。

②通过链接的方式添加图片可以实现,但上传本地图片,需要使用Base64 图片上传适配器。(网上很多文章或者官网使用ckfinder、ckeditor5-easy-image、ckeditor5-image,本人尝试过后都未能实现预期效果)

③表格或图片样式被过滤,即:在ckeditor中画的表格,提取出来在另一个地方显示,却没有表格样式(表格线、颜色等),只有按照表格顺序显示的一堆内容。解决这个问题需要在显示的地方添加编辑器的style样式:(其中,addTemplateContentShow表示用来显示ckeditor中编辑的内容的容器,而addTemplateContent表示ckeditor中编辑的内容)

this.addTemplateContentShow = `<html lang="zh"><head><style>:root {--ck-color-image-caption-background: hsl(0, 0%, 97%);--ck-color-image-caption-text: hsl(0, 0%, 20%);--ck-color-mention-background: hsla(341, 100%, 30%, 0.1);--ck-color-mention-text: hsl(341, 100%, 30%);--ck-color-table-caption-background: hsl(0, 0%, 97%);--ck-color-table-caption-text: hsl(0, 0%, 20%);--ck-highlight-marker-blue: hsl(201, 97%, 72%);--ck-highlight-marker-green: hsl(120, 93%, 68%);--ck-highlight-marker-pink: hsl(345, 96%, 73%);--ck-highlight-marker-yellow: hsl(60, 97%, 73%);--ck-highlight-pen-green: hsl(112, 100%, 27%);--ck-highlight-pen-red: hsl(0, 85%, 49%);--ck-image-style-spacing: 1.5em;--ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);--ck-todo-list-checkmark-size: 16px;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-block-align-left,.ck-content .image-style-block-align-right {max-width: calc(100% - var(--ck-image-style-spacing));}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-align-left,.ck-content .image-style-align-right {clear: none;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-side {float: right;margin-left: var(--ck-image-style-spacing);max-width: 50%;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-align-left {float: left;margin-right: var(--ck-image-style-spacing);}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-align-center {margin-left: auto;margin-right: auto;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-align-right {float: right;margin-left: var(--ck-image-style-spacing);}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-block-align-right {margin-right: 0;margin-left: auto;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-style-block-align-left {margin-left: 0;margin-right: auto;}/* ckeditor5-image/theme/imagestyle.css */.ck-content p + .image-style-align-left,.ck-content p + .image-style-align-right,.ck-content p + .image-style-side {margin-top: 0;}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right {margin-top: var(--ck-inline-image-style-spacing);margin-bottom: var(--ck-inline-image-style-spacing);}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-inline.image-style-align-left {margin-right: var(--ck-inline-image-style-spacing);}/* ckeditor5-image/theme/imagestyle.css */.ck-content .image-inline.image-style-align-right {margin-left: var(--ck-inline-image-style-spacing);}/* ckeditor5-image/theme/imagecaption.css */.ck-content .image > figcaption {display: table-caption;caption-side: bottom;word-break: break-word;color: var(--ck-color-image-caption-text);background-color: var(--ck-color-image-caption-background);padding: .6em;font-size: .75em;outline-offset: -1px;}/* ckeditor5-font/theme/fontsize.css */.ck-content .text-tiny {font-size: .7em;}/* ckeditor5-font/theme/fontsize.css */.ck-content .text-small {font-size: .85em;}/* ckeditor5-font/theme/fontsize.css */.ck-content .text-big {font-size: 1.4em;}/* ckeditor5-font/theme/fontsize.css */.ck-content .text-huge {font-size: 1.8em;}/* ckeditor5-highlight/theme/highlight.css */.ck-content .marker-yellow {background-color: var(--ck-highlight-marker-yellow);}/* ckeditor5-highlight/theme/highlight.css */.ck-content .marker-green {background-color: var(--ck-highlight-marker-green);}/* ckeditor5-highlight/theme/highlight.css */.ck-content .marker-pink {background-color: var(--ck-highlight-marker-pink);}/* ckeditor5-highlight/theme/highlight.css */.ck-content .marker-blue {background-color: var(--ck-highlight-marker-blue);}/* ckeditor5-highlight/theme/highlight.css */.ck-content .pen-red {color: var(--ck-highlight-pen-red);background-color: transparent;}/* ckeditor5-highlight/theme/highlight.css */.ck-content .pen-green {color: var(--ck-highlight-pen-green);background-color: transparent;}/* ckeditor5-image/theme/imageresize.css */.ck-content .image.image_resized {max-width: 100%;display: block;box-sizing: border-box;}/* ckeditor5-image/theme/imageresize.css */.ck-content .image.image_resized img {width: 100%;}/* ckeditor5-image/theme/imageresize.css */.ck-content .image.image_resized > figcaption {display: block;}/* ckeditor5-image/theme/image.css */.ck-content .image {display: table;clear: both;text-align: center;margin: 0.9em auto;min-width: 50px;}/* ckeditor5-image/theme/image.css */.ck-content .image img {display: block;margin: 0 auto;max-width: 100%;min-width: 100%;}/* ckeditor5-image/theme/image.css */.ck-content .image-inline {/* * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. * This strange behavior does not happen with inline-flex. */display: inline-flex;max-width: 100%;align-items: flex-start;}/* ckeditor5-image/theme/image.css */.ck-content .image-inline picture {display: flex;}/* ckeditor5-image/theme/image.css */.ck-content .image-inline picture,.ck-content .image-inline img {flex-grow: 1;flex-shrink: 1;max-width: 100%;}/* ckeditor5-horizontal-line/theme/horizontalline.css */.ck-content hr {margin: 15px 0;height: 4px;background: hsl(0, 0%, 87%);border: 0;}/* ckeditor5-block-quote/theme/blockquote.css */.ck-content blockquote {overflow: hidden;padding-right: 1.5em;padding-left: 1.5em;margin-left: 0;margin-right: 0;font-style: italic;border-left: solid 5px hsl(0, 0%, 80%);}/* ckeditor5-block-quote/theme/blockquote.css */.ck-content[dir="rtl"] blockquote {border-left: 0;border-right: solid 5px hsl(0, 0%, 80%);}/* ckeditor5-basic-styles/theme/code.css */.ck-content code {background-color: hsla(0, 0%, 78%, 0.3);padding: .15em;border-radius: 2px;}/* ckeditor5-table/theme/table.css */.ck-content .table {margin: 0.9em auto;display: table;}/* ckeditor5-table/theme/table.css */.ck-content .table table {border-collapse: collapse;border-spacing: 0;width: 100%;height: 100%;border: 1px double hsl(0, 0%, 70%);}/* ckeditor5-table/theme/table.css */.ck-content .table table td,.ck-content .table table th {min-width: 2em;padding: .4em;border: 1px solid hsl(0, 0%, 75%);}/* ckeditor5-table/theme/table.css */.ck-content .table table th {font-weight: bold;background: hsla(0, 0%, 0%, 5%);}/* ckeditor5-table/theme/table.css */.ck-content[dir="rtl"] .table th {text-align: right;}/* ckeditor5-table/theme/table.css */.ck-content[dir="ltr"] .table th {text-align: left;}/* ckeditor5-table/theme/tablecaption.css */.ck-content .table > figcaption {display: table-caption;caption-side: top;word-break: break-word;text-align: center;color: var(--ck-color-table-caption-text);background-color: var(--ck-color-table-caption-background);padding: .6em;font-size: .75em;outline-offset: -1px;}/* ckeditor5-page-break/theme/pagebreak.css */.ck-content .page-break {position: relative;clear: both;padding: 5px 0;display: flex;align-items: center;justify-content: center;}/* ckeditor5-page-break/theme/pagebreak.css */.ck-content .page-break::after {content: '';position: absolute;border-bottom: 2px dashed hsl(0, 0%, 77%);width: 100%;}/* ckeditor5-page-break/theme/pagebreak.css */.ck-content .page-break__label {position: relative;z-index: 1;padding: .3em .6em;display: block;text-transform: uppercase;border: 1px solid hsl(0, 0%, 77%);border-radius: 2px;font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;font-size: 0.75em;font-weight: bold;color: hsl(0, 0%, 20%);background: hsl(0, 0%, 100%);box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}/* ckeditor5-media-embed/theme/mediaembed.css */.ck-content .media {clear: both;margin: 0.9em 0;display: block;min-width: 15em;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list {list-style: none;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list li {margin-bottom: 5px;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list li .todo-list {margin-top: 5px;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label > input {-webkit-appearance: none;display: inline-block;position: relative;width: var(--ck-todo-list-checkmark-size);height: var(--ck-todo-list-checkmark-size);vertical-align: middle;border: 0;left: -25px;margin-right: -15px;right: 0;margin-left: 0;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label > input::before {display: block;position: absolute;box-sizing: border-box;content: '';width: 100%;height: 100%;border: 1px solid hsl(0, 0%, 20%);border-radius: 2px;transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border;}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label > input::after {display: block;position: absolute;box-sizing: content-box;pointer-events: none;content: '';left: calc(var(--ck-todo-list-checkmark-size) / 3);top: calc(var(--ck-todo-list-checkmark-size) / 5.3);width: calc(var(--ck-todo-list-checkmark-size) / 5.3);height: calc(var(--ck-todo-list-checkmark-size) / 2.6);border-style: solid;border-color: transparent;border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0;transform: rotate(45deg);}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label > input[checked]::before {background: hsl(126, 64%, 41%);border-color: hsl(126, 64%, 41%);}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label > input[checked]::after {border-color: hsl(0, 0%, 100%);}/* ckeditor5-list/theme/todolist.css */.ck-content .todo-list .todo-list__label .todo-list__label__description {vertical-align: middle;}/* ckeditor5-language/theme/language.css */.ck-content span[lang] {font-style: italic;}/* ckeditor5-code-block/theme/codeblock.css */.ck-content pre {padding: 1em;color: hsl(0, 0%, 20.8%);background: hsla(0, 0%, 78%, 0.3);border: 1px solid hsl(0, 0%, 77%);border-radius: 2px;text-align: left;direction: ltr;tab-size: 4;white-space: pre-wrap;font-style: normal;min-width: 200px;}/* ckeditor5-code-block/theme/codeblock.css */.ck-content pre code {background: unset;padding: 0;border-radius: 0;}/* ckeditor5-mention/theme/mention.css */.ck-content .mention {background: var(--ck-color-mention-background);color: var(--ck-color-mention-text);}@media print {/* ckeditor5-page-break/theme/pagebreak.css */.ck-content .page-break {padding: 0;}/* ckeditor5-page-break/theme/pagebreak.css */.ck-content .page-break::after {display: none;}}</style></head><body><div class="ck-content">` + this.addTemplateContent + `</div></body></html>`

基于以上,博主实现了绝大部分功能的自定义ckeditor示例如下:
效果图:

实现代码:

import CKEditor from '@ckeditor/ckeditor5-vue2'
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'
import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'
import BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'
import ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'
import Underline from '@ckeditor/ckeditor5-basic-styles/src/underline'
import Strikethrough from '@ckeditor/ckeditor5-basic-styles/src/strikethrough'
import Code from '@ckeditor/ckeditor5-basic-styles/src/code'
import Link from '@ckeditor/ckeditor5-link/src/link'
import ParagraphPlugin from '@ckeditor/ckeditor5-paragraph/src/paragraph'
import Heading from '@ckeditor/ckeditor5-heading/src/heading'
import FontColor from '@ckeditor/ckeditor5-font/src/fontcolor'
import FontBackgroundColor from '@ckeditor/ckeditor5-font/src/fontbackgroundcolor'
import FontFamily from '@ckeditor/ckeditor5-font/src/fontfamily'
import FontSize from '@ckeditor/ckeditor5-font/src/fontsize'
import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment'
import Table from '@ckeditor/ckeditor5-table/src/table'
import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar'
import TableCaption from '@ckeditor/ckeditor5-table/src/tablecaption'
import TableProperties from '@ckeditor/ckeditor5-table/src/tableproperties'
import TableCellProperties from '@ckeditor/ckeditor5-table/src/tablecellproperties'
import ListStyle from '@ckeditor/ckeditor5-list/src/liststyle'
import HorizontalLine from '@ckeditor/ckeditor5-horizontal-line/src/horizontalline'
import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote'
import Indent from '@ckeditor/ckeditor5-indent/src/indent'
import IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock'
import EasyImage from '@ckeditor/ckeditor5-easy-image/src/easyimage'
import Image from '@ckeditor/ckeditor5-image/src/image'
import ImageResize from '@ckeditor/ckeditor5-image/src/imageresize'
import CloudServicesPlugin from '@ckeditor/ckeditor5-cloud-services/src/cloudservices'
import ImageInsert from '@ckeditor/ckeditor5-image/src/imageinsert'
import SpecialCharacters from '@ckeditor/ckeditor5-special-characters/src/specialcharacters'
import SpecialCharactersEssentials from '@ckeditor/ckeditor5-special-characters/src/specialcharactersessentials'
import Base64UploadAdapter from '@ckeditor/ckeditor5-upload/src/adapters/base64uploadadapter'
components: {ckeditor: CKEditor.component
}

<ckeditor :editor="editor" v-model="addTemplateContent" :config="editorConfig"></ckeditor>

data () {return {editor: ClassicEditor,editorConfig: {placeholder: 'Type something',plugins: [EssentialsPlugin,BoldPlugin,ItalicPlugin,Underline,Strikethrough,Code,Link,ParagraphPlugin,Heading,FontColor,FontBackgroundColor,FontFamily,FontSize,Alignment,Table,TableToolbar,TableCaption,TableProperties,TableCellProperties,ListStyle,HorizontalLine,BlockQuote,EasyImage,Image,ImageResize,CloudServicesPlugin,ImageInsert,Indent,IndentBlock,SpecialCharacters,SpecialCharactersEssentials,Base64UploadAdapter],toolbar: {shouldNotGroupWhenFull: true,items: ['heading','|','bold','italic','underline','strikethrough','code','link','|','numberedList','bulletedList','|','fontFamily','fontSize','fontColor','fontBackgroundColor','|','outdent','indent','|','blockQuote','alignment','insertImage','insertTable','horizontalLine','specialCharacters','|','undo','redo']},heading: {options: [{ model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },{ model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' },{ model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' },{ model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' }]},fontFamily: {options: ['default','Ubuntu, Arial, sans-serif','Ubuntu Mono, Courier New, Courier, monospace']}[添加链接描述](https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html),fontSize: {options: [10,12,'default',16,18,20],supportAllValues: true},alignment: {options: ['left', 'center', 'right']},table: {contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells', 'toggleTableCaption', 'tableProperties', 'tableCellProperties']}},addTemplateContent: ''}}

有更多的疑问,可以查询:CKEditor5文档

CKEditor5富文本编辑器在vue中的使用相关推荐

  1. TinyMCE富文本编辑器在Vue中的使用

    ✍️ 作者简介: 一个每天中午去打篮球和锻炼的前端开发.

  2. 在Vue中使用CKEditor5富文本编辑器

    在项目中遇到富文本编辑器需要实现粘贴图片的功能,使用场景:如用户在其他地方截图可以直接在富文本编辑器内粘贴. 找了一圈市面上开源免费的富文本编辑器,最后选中CKEditor.ckeditor  doc ...

  3. Tinymce富文本编辑器在vue项目中的使用;引入第三方插件和上传视频、图片等

    先放张效果图 第一步:安装依赖 npm install tinymce@5.0.12 第二步:在项目中的public文件夹中新建tinymce文件夹(因为我的项目是脚手架创建的,所以公共文件夹是pub ...

  4. html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器

    点击上方"小姚同学技术栈"快速关注我哟! vue-quill-editor是一个基于quill.适用于vue的富文本编辑器开源项目,支持服务端渲染和单页应用.目前项目热度还算可以, ...

  5. wangeditor富文本编辑器使用过程中遇到的问题以及解决办法

    背景 我的项目之前用的富文本编辑器是quill,之前其实考虑用过wangeditor,但是当时wangeditor V3的英文支持不友好,而我们业务是面向海外的,所以综合考虑下来用了quill. 最近 ...

  6. CKEditor5 富文本编辑器安装以及使用

    CKEditor 5简介 CKEditor 5是一个超现代的JavaScript富文本编辑器,具有MVC架构.自定义数据模型和虚拟DOM.它是在ES6中从头编写的,并且有出色的webpack支持.包含 ...

  7. ckeditor5富文本编辑器(1)

    ckeditor5官方网站: https://ckeditor.com/ckeditor-5/ ckeditor5下载: https://ckeditor.com/ckeditor-5/downloa ...

  8. 富文本编辑器(Vue插件)

    下载 vue-quill-editor // 下载Vue-Quill-Editor npm install vue-quill-editor --save; 下载quill(Vue-Quill-Edi ...

  9. ckeditor5html编辑,CKEditor5富文本编辑器如何取值

    ClassicEditor .create( document.querySelector( '#editor' ), { //工具栏,可选择添加或去除 toolbar: ['headings', ' ...

  10. Vue中使用vue-quil-editor富文本编辑器+el-upload实现带图片上传到SpringBoot后台接口

    场景 系统中经常会用到富文本编辑器,比如新增通知和公告功能,并且需要添加上传图片. vue-quill-editor官网: https://www.npmjs.com/package/vue-quil ...

最新文章

  1. php除去重复数组算法,如何从PHP中的多维数组中删除重复值
  2. 搭建nginx服务、nginx的升级安装、Nginx配置文件的解析、web页面用户认证
  3. python一些常用方法_python 的一些常用方法
  4. 面试题 02.01. 移除重复节点
  5. catia圆管焊接焊接_CATIA焊接教程.ppt
  6. linux百万行数据加分页符,百万级数据量报表全量导出
  7. 【php】用filter_var实现的简单参数验证
  8. h.264 视频解码的一点小经验(ffmpeg)
  9. “约见”面试官系列之常见面试题第二十八篇之vue中的混合(minix)实例理解
  10. C语言:几种字符输入函数的区别
  11. VBS操作注册表设置新建读取,删除等操作(更新中)
  12. 斐波那契数列-爬楼梯算法
  13. 慢动作重播~ 英伟达AI能把普通视频,变成高质量慢动作视频
  14. C语言之——文件操作模式
  15. Zend Framework学习之验证ing
  16. java开发转测试开发经历
  17. 不懂Web基本原理怎么能学好爬虫。( 二、Web服务器工作原理)(爬虫、反爬虫、服务器、客户端、网络协议 )
  18. virtualbox win10 共享文件夹
  19. Google Earth Engine ——边界线识别!
  20. html5密码确认属性,HTML5表单及其验证【html自带属性验证】

热门文章

  1. (转)“不开心”的10种英语表达
  2. 在选用矿物质防火电缆的时候应该注意什么?
  3. vue去除input在360兼容模式下删除图标
  4. win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
  5. JavaScript动画
  6. Postman如何设置成中文?(汉化)
  7. AXD 调试经验,使用及问题
  8. 数据分析英文单词释义Byte,Cube,Dimension,Measures,Cuboid,环比
  9. windows bat脚本实现ftp自动下载 删除
  10. nowcoder16638 carpet