如何在vue中使用kindeditor富文本编辑器

作者:火星黑洞 时间:2024-05-09 15:16:26 

第一步,下载依赖


yarn add kindeditor

第二步,建立kindeditor.vue组件


<template>
<div class="kindeditor">
<textarea :id="id" name="content" v-model="outContent"></textarea>
</div>
</template>

<script>
import '../../node_modules/kindeditor/kindeditor-all.js'
import '../../node_modules/kindeditor/lang/zh-CN.js'
import '../../node_modules/kindeditor/themes/default/default.css'

export default {
name: 'kindeditor',
data () {
return {
 editor: null,
 outContent: this.content
}
},
props: {
content: {
 type: String,
 default: ''
},
id: {
 type: String,
 required: true
},
width: {
 type: String
},
height: {
 type: String
},
minWidth: {
 type: Number,
 default: 650
},
minHeight: {
 type: Number,
 default: 100
},
items: {
 type: Array,
 default: function () {
 return [
  'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',
  'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
  'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
  'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',
  'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
  'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',
  'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',
  'anchor', 'link', 'unlink', '|', 'about'
 ]
 }
},
noDisableItems: {
 type: Array,
 default: function () {
 return ['source', 'fullscreen']
 }
},
filterMode: {
 type: Boolean,
 default: true
},
htmlTags: {
 type: Object,
 default: function () {
 return {
  font: ['color', 'size', 'face', '.background-color'],
  span: ['style'],
  div: ['class', 'align', 'style'],
  table: ['class', 'border', 'cellspacing', 'cellpadding', 'width', 'height', 'align', 'style'],
  'td,th': ['class', 'align', 'valign', 'width', 'height', 'colspan', 'rowspan', 'bgcolor', 'style'],
  a: ['class', 'href', 'target', 'name', 'style'],
  embed: ['src', 'width', 'height', 'type', 'loop', 'autostart', 'quality',
  'style', 'align', 'allowscriptaccess', '/'],
  img: ['src', 'width', 'height', 'border', 'alt', 'title', 'align', 'style', '/'],
  hr: ['class', '/'],
  br: ['/'],
  'p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6': ['align', 'style'],
  'tbody,tr,strong,b,sub,sup,em,i,u,strike': []
 }
 }
},
wellFormatMode: {
 type: Boolean,
 default: true
},
resizeType: {
 type: Number,
 default: 2
},
themeType: {
 type: String,
 default: 'default'
},
langType: {
 type: String,
 default: 'zh-CN'
},
designMode: {
 type: Boolean,
 default: true
},
fullscreenMode: {
 type: Boolean,
 default: false
},
basePath: {
 type: String
},
themesPath: {
 type: String
},
pluginsPath: {
 type: String,
 default: ''
},
langPath: {
 type: String
},
minChangeSize: {
 type: Number,
 default: 5
},
loadStyleMode: {
 type: Boolean,
 default: true
},
urlType: {
 type: String,
 default: ''
},
newlineTag: {
 type: String,
 default: 'p'
},
pasteType: {
 type: Number,
 default: 2
},
dialogAlignType: {
 type: String,
 default: 'page'
},
shadowMode: {
 type: Boolean,
 default: true
},
zIndex: {
 type: Number,
 default: 811213
},
useContextmenu: {
 type: Boolean,
 default: true
},
syncType: {
 type: String,
 default: 'form'
},
indentChar: {
 type: String,
 default: '\t'
},
cssPath: {
 type: [ String, Array ]
},
cssData: {
 type: String
},
bodyClass: {
 type: String,
 default: 'ke-content'
},
colorTable: {
 type: Array
},
afterCreate: {
 type: Function
},
afterChange: {
 type: Function
},
afterTab: {
 type: Function
},
afterFocus: {
 type: Function
},
afterBlur: {
 type: Function
},
afterUpload: {
 type: Function
},
uploadJson: {
 type: String
},
fileManagerJson: {
 type: Function
},
allowPreviewEmoticons: {
 type: Boolean,
 default: true
},
allowImageUpload: {
 type: Boolean,
 default: true
},
allowFlashUpload: {
 type: Boolean,
 default: true
},
allowMediaUpload: {
 type: Boolean,
 default: true
},
allowFileUpload: {
 type: Boolean,
 default: true
},
allowFileManager: {
 type: Boolean,
 default: false
},
fontSizeTable: {
 type: Array,
 default: function () {
 return ['9px', '10px', '12px', '14px', '16px', '18px', '24px', '32px']
 }
},
imageTabIndex: {
 type: Number,
 default: 0
},
formatUploadUrl: {
 type: Boolean,
 default: true
},
fullscreenShortcut: {
 type: Boolean,
 default: false
},
extraFileUploadParams: {
 type: Array,
 default: function () {
 return []
 }
},
filePostName: {
 type: String,
 default: 'imgFile'
},
fillDescAfterUploadImage: {
 type: Boolean,
 default: false
},
afterSelectFile: {
 type: Function
},
pagebreakHtml: {
 type: String,
 default: '<hr style=”page-break-after: always;” class=”ke-pagebreak” />'
},
allowImageRemote: {
 type: Boolean,
 default: true
},
autoHeightMode: {
 type: Boolean,
 default: false
},
fixToolBar: {
 type: Boolean,
 default: false
},
tabIndex: {
 type: Number
}
},
watch: {
content (val) {
 this.editor && val !== this.outContent && this.editor.html(val)
},
outContent (val) {
 this.$emit('update:content', val)
 this.$emit('on-content-change', val)
}
},
mounted () {
var _this = this
_this.editor = window.KindEditor.create('#' + this.id, {
 width: _this.width,
 height: _this.height,
 minWidth: _this.minWidth,
 minHeight: _this.minHeight,
 items: _this.items,
 noDisableItems: _this.noDisableItems,
 filterMode: _this.filterMode,
 htmlTags: _this.htmlTags,
 wellFormatMode: _this.wellFormatMode,
 resizeType: _this.resizeType,
 themeType: _this.themeType,
 langType: _this.langType,
 designMode: _this.designMode,
 fullscreenMode: _this.fullscreenMode,
 basePath: _this.basePath,
 themesPath: _this.cssPath,
 pluginsPath: _this.pluginsPath,
 langPath: _this.langPath,
 minChangeSize: _this.minChangeSize,
 loadStyleMode: _this.loadStyleMode,
 urlType: _this.urlType,
 newlineTag: _this.newlineTag,
 pasteType: _this.pasteType,
 dialogAlignType: _this.dialogAlignType,
 shadowMode: _this.shadowMode,
 zIndex: _this.zIndex,
 useContextmenu: _this.useContextmenu,
 syncType: _this.syncType,
 indentChar: _this.indentChar,
 cssPath: _this.cssPath,
 cssData: _this.cssData,
 bodyClass: _this.bodyClass,
 colorTable: _this.colorTable,
 afterCreate: _this.afterCreate,
 afterChange: function () {
 _this.afterChange
 _this.outContent = this.html()
 },
 afterTab: _this.afterTab,
 afterFocus: _this.afterFocus,
 afterBlur: _this.afterBlur,
 afterUpload: _this.afterUpload,
 uploadJson: _this.uploadJson,
 fileManagerJson: _this.fileManagerJson,
 allowPreviewEmoticons: _this.allowPreviewEmoticons,
 allowImageUpload: _this.allowImageUpload,
 allowFlashUpload: _this.allowFlashUpload,
 allowMediaUpload: _this.allowMediaUpload,
 allowFileUpload: _this.allowFileUpload,
 allowFileManager: _this.allowFileManager,
 fontSizeTable: _this.fontSizeTable,
 imageTabIndex: _this.imageTabIndex,
 formatUploadUrl: _this.formatUploadUrl,
 fullscreenShortcut: _this.fullscreenShortcut,
 extraFileUploadParams: _this.extraFileUploadParams,
 filePostName: _this.filePostName,
 fillDescAfterUploadImage: _this.fillDescAfterUploadImage,
 afterSelectFile: _this.afterSelectFile,
 pagebreakHtml: _this.pagebreakHtml,
 allowImageRemote: _this.allowImageRemote,
 autoHeightMode: _this.autoHeightMode,
 fixToolBar: _this.fixToolBar,
 tabIndex: _this.tabIndex
})
}
}
</script>

<style>

</style>

第三步,引入使用


<template>
<div id="app">
 <editor id="editor_id" height="500px" width="700px" :content.sync="editorText"
  :afterChange="afterChange()"
  :loadStyleMode="false"
  @on-content-change="onContentChange"></editor>
<div> editorTextCopy: {{ editorTextCopy }} </div>

</div>
</template>

<script>
import editor from './components/kindeditor.vue'

export default {
name: 'app',
components: {
editor
},
data () {
return {
 editorText: '直接初始化值', // 双向同步的变量
 editorTextCopy: '' // content-change 事件回掉改变的对象
}
},
methods: {
onContentChange (val) {
 this.editorTextCopy = val;
 window.console.log(this.editorTextCopy)
},
afterChange () {
}
}
}
</script>

效果如下:

如何在vue中使用kindeditor富文本编辑器来源:https://www.cnblogs.com/ldlx-mars/p/11881242.html

标签:vue,kindeditor,富文本,编辑器
0
投稿

猜你喜欢

  • Python Opencv轮廓常用操作代码实例解析

    2023-01-03 08:46:59
  • 利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例

    2022-11-30 20:40:01
  • python基础之for循环

    2021-08-06 02:12:51
  • 使用ODBC接口访问MySQL

    2009-02-13 13:59:00
  • 部署.Net6项目到docker

    2024-06-05 15:43:46
  • SQL Server 2008的一些新特点及独到之处

    2009-01-15 12:59:00
  • 单步调试 step into/step out/step over 区别说明

    2022-03-09 20:03:26
  • 创意设计:字母趣味组合

    2008-01-26 18:50:00
  • perl控制流介绍(if条件,while,for循环,foreach)

    2023-02-13 16:33:34
  • python 解决mysql where in 对列表(list,,array)问题

    2024-01-27 06:34:23
  • SQLServer与服务器连接时出错的解决方案

    2009-06-28 14:35:00
  • 解决django FileFIELD的编码问题

    2023-07-01 04:28:42
  • [翻译]标记语言和样式手册 Chapter 14 图片替换

    2008-02-18 12:56:00
  • vue中手机号,邮箱正则验证以及60s发送验证码的实例

    2024-04-10 13:50:29
  • Python3使用requests发闪存的方法

    2021-06-09 16:07:20
  • JavaScript实现大文件上传的示例代码

    2024-05-28 15:40:23
  • Python+Sklearn实现异常检测

    2022-09-06 14:28:47
  • 跟老齐学Python之重回函数

    2022-06-29 16:55:43
  • Python 虚拟机集合set实现原理及源码解析

    2023-11-20 11:36:13
  • Go 语言前缀树实现敏感词检测

    2024-05-05 09:27:18
  • asp之家 网络编程 m.aspxhome.com