ckeditor5自定义 vue_vue,ckeditor5,阿里oss服务的集成

ckeditor5中有几种图片上传的方式,最方便的就是简单上传,前端只用调用一个后端的方法,就可以完成上传,但问题是后端要实现这个方法。

为了避免和后端打交道,可以使用自定义上传方法的方式,把上传的图片直接传到oss上。

因为它这个官网上的教程当时我看的时候实在是懵逼,再加上很多中国的程序员也实在赶时间,所以还是写篇中文的文章来说一下,需要看官网教程的同学移步传送门:

Custom upload adapter - CKEditor 5 Documentation​ckeditor.com
955b1b60768f8bf4a71ceb71d1f14e29.png

这里先说一下,官网教程的叙述顺序感觉是由全局到整体的方式,所以你如果顺着看,代码里会出现很多莫名其妙没有见过的变量,这个时候不要慌,看下去就是了,在后面都会一一解释的。

这里直接放上ckeditor组件的代码:

<template>
  <ckeditor class='richTest' v-model='cont' :editor='editor' :config='editorConfig' :disabled='disabled'></ckeditor>
</template>

<script>
import ClassicEditor from '@ckeditor/ckeditor5-build-classic'

function customUploadAdapterPlugin (editor) {
  editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
    return new UploadAdapter(loader)
  }
}

let vue = {}
class UploadAdapter {
  constructor (loader) {
    this.loader = loader
  }
  upload () {
    return this.loader.file.then(file => new Promise((resolve, reject) => {
      vue.$oss.uploadToOss(file).then(res => {
        resolve({default: res.url, ...res})
      }).catch(error => {
        reject(error)
      })
    }))
  }
  abort () {
    console.log('ckeditor: abort to insert image!')
  }
}
export default {
  name: 'ckeditor',
  inject: ['errorMessage'],
  props: {
    content: {
      type: String,
      default: ''
    },
    disabled: {
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      editor: ClassicEditor,
      editorConfig: {
        language: "zh-cn",
        toolbar: ["heading", "|", "bold", "italic", "link", "bulletedList", "numberedList", "blockQuote", "imageUpload", "|", "undo", "redo"],
        extraPlugins: [ customUploadAdapterPlugin ]
      }
    }
  },
  computed: {
    cont: {
      get: function () {
        return this.content === null ? '' : this.content
      },
      set: function (newValue) {
        this.$emit('getContent', newValue)
      }
    }
  },
  created () {
    vue = this
  }
}
</script>

<style scoped>
.richTest {
  height: 31.25rem;
}
</style>

整个组件总共接收两个参数,一个方法:

参数:content

富文本内容,用于编辑功能的自动填充。

参数:disabled

设置是否只读。

方法:getContent

用于让父组件拿到这个组件的富文本内容。

需要注意的几点:

  • 这里的vue.$oss.uploadToOss是我在oss配置文件里自定义的方法,它长成这样:
  // 上传到 OSS
  async uploadToOss (source) {
    // el-upload的返回值file在raw里,ckeditor的直接就是file
    const file = source.raw ? source.raw : source
    const ext = file.name.split('.').pop()
    const fileName = this.generateMixed(32) + '.' + ext
    try {
      let res = await this.client.multipartUpload(`HereIsFileUrl/${fileName}`, file)
      return {...res, url: baseUrl + res.name}
    } catch (e) {
      throw new Error(e)
    }
  }

vue是当前vue组件实例,在created生命周期被赋予。

里面也提到了使用el-upload的回调和ckeditor的区别。

  • 自定义ckeditor5高度的办法
<style lang="stylus">
#I_am_just_a_qualifier
  .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable, .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners
    height 100px
</style>

注意这里用id限定了一下作用域,避免样式全局污染。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CKEditor5的自定义插件可以通过以下步骤来实现: 1. 下载CKEditor5的官方源码,推荐使用稳定分支。可以使用以下命令克隆官方源码库: ``` $ git clone -b stable https://github.com/ckeditor/ckeditor5-build-classic.git ``` 2. 在下载完成后,进入`packages`文件夹,选择一个基础编辑器包(例如:`ckeditor5-build-classic`),这个包就是官网Demo中的经典编辑器。 3. 进入选定的编辑器包,运行`npm install`命令安装依赖。 4. 运行`npm run build`命令生成`build`文件夹,其中包含了打包好的编辑器。 5. 将打包好的编辑器导入到项目中使用。可以通过访问`index.html`文件来查看效果。 6. 如果需要添加插件,可以使用`npm install --save-dev @ckeditor/ckeditor5-alignment`命令安装插件。然后在项目中直接使用该插件即可。 7. 在自定义插件的开发中,可以使用`CKEditorWebpackPlugin`插件来解析`po`文件。该插件在`webpack.config.js`文件中配置,具体参数可以根据需求进行调整。 8. 在自定义插件的开发中,可以创建一个新的插件类,继承自`Plugin`类,并实现相应的方法。例如,可以创建一个名为`SpecialCharactersEmoji`的插件,其中`pluginName`方法返回插件的名称,`init`方法用于初始化插件。 9. 在`init`方法中,可以通过`editor.plugins.get("SpecialCharacters")`来获取特殊字符插件,并使用`addItems`方法来添加自定义的特殊字符。 以上是关于CKEditor5自定义插件的简要介绍和使用方法。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)](https://blog.csdn.net/zz00008888/article/details/125737119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ckeditor5编写自定义插件,并做国际化处理](https://blog.csdn.net/cc_want/article/details/119457360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值