Vue CKEditor5 剪切板事件监听,贴贴事件拦截

一、简介

二、方式一:通过 元素标签 使用

  • 案例代码

    <template>
      <!-- ckeditor 父元素 -->
      <div class="editor-view">
        <!-- 编辑器 -->
        <div id="editor"></div>
      </div>
    </template>
    
    <script>
    // 经典编辑器($ npm install --save @ckeditor/ckeditor5-build-classic)
    import Editor from '@ckeditor/ckeditor5-build-classic'
    
    // 中文包(语言包都在 build 版本中,注意 ckeditor5-build-xxx,xxx 需要替换为安装的编辑器包路径)
    import '@ckeditor/ckeditor5-build-classic/build/translations/zh-cn'
    
    // 安装剪切板($ npm install @ckeditor/ckeditor5-clipboard)
    import plainTextToHtml from '@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml'
    
    export default {
      data () {
        return {
          // 编辑器对象
          editor: undefined,
          // 编辑内容
          editorData: '<p>Content of the editor</p>',
          // 编辑器配置
          editorConfig: {
            // 配置语言
            language: 'zh-cn'
            // 功能栏
            // toolbar: {
            //   items: ['Bold', 'Italic', 'Link' ...]
            // }
            // 更多的配置....
          }
        }
      },
      mounted () {
        // 初始化编辑器
        Editor.create(document.querySelector('#editor'), this.editorConfig).then(editor => {
          console.log('创建成功')
          // 记录编辑器对象
          this.editor = editor
          // 监听内容变化
          // editor.model.document.on('change:data', (e) => {
          //   // 输出当前内容
          //   console.log(editor.getData(), e)
          // })
          // 剪切板内容拦截处理
          editor.plugins.get('ClipboardPipeline').on('inputTransformation', (evt, data) => {
            const dataTransfer = data.dataTransfer
            let content = plainTextToHtml(dataTransfer.getData('text/plain'))
            data.content = this.editor.data.htmlProcessor.toView(content)
          })
          // 初始化内容
          editor.setData(this.editorData)
        }).catch(error => {
          console.log('创建失败', error)
        })
      }
    }
    </script>
    

三、方式一:通过 @ckeditor/ckeditor5-vue2 组件使用

  • main.js

    // 导入编辑器组件($ npm install @ckeditor/ckeditor5-vue2)
    import CKEditor from '@ckeditor/ckeditor5-vue2'
    Vue.use( CKEditor )
    
  • 案例代码

    <template>
      <!-- ckeditor 父元素 -->
      <div class="editor-view">
        <!-- 编辑器 -->
        <ckeditor :editor="editor" v-model="editorData" :config="editorConfig" @ready="onReady"></ckeditor>
      </div>
    </template>
    
    <script>
    // 经典编辑器($ npm install --save @ckeditor/ckeditor5-build-classic)
    import Editor from '@ckeditor/ckeditor5-build-classic'
    
    // 中文包(语言包都在 build 版本中,注意 ckeditor5-build-xxx,xxx 需要替换为安装的编辑器包路径)
    import '@ckeditor/ckeditor5-build-classic/build/translations/zh-cn'
    
    // 安装剪切板($ npm install @ckeditor/ckeditor5-clipboard)
    import plainTextToHtml from '@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml'
    export default {
      data () {
        return {
          // 编辑器对象
          editor: Editor,
          // 编辑内容
          editorData: '<p>Content of the editor</p>',
          // 编辑器配置
          editorConfig: {
            // 配置语言
            language: 'zh-cn'
            // 功能栏
            // toolbar: {
            //   items: ['Bold', 'Italic', 'Link' ...]
            // }
            // 更多的配置....
          }
        }
      },
      methods: {
        onReady (editor) {
          editor.plugins.get('ClipboardPipeline').on('inputTransformation', (evt, data) => {
            const dataTransfer = data.dataTransfer
            let content = plainTextToHtml(dataTransfer.getData('text/plain'))
            data.content = editor.data.htmlProcessor.toView(content)
          })
        }
      }
    }
    </script>
    

四、细节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中子组件向父组件传递动态事件监听可以通过自定义事件实现。 首先,在子组件中定义一个方法,用来触发要传递给父组件的事件。可以使用`this.$emit()`方法来触发自定义事件,并传递需要传递给父组件的数据。 ```javascript <template> <button @click="triggerEvent">点击触发事件</button> </template> <script> export default { methods: { triggerEvent() { // 传递数据给父组件 this.$emit('custom-event', '这是子组件传递给父组件的数据'); } } }; </script> ``` 接下来,在父组件中使用子组件,并在父组件中监听子组件触发的自定义事件。可以使用`@custom-event`来监听子组件触发的事件,并在对应的方法中处理子组件传递过来的数据。 ```javascript <template> <div> <p>接收到的数据:{{ eventData }}</p> <child-component @custom-event="handleCustomEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { eventData: '' }; }, methods: { handleCustomEvent(data) { // 处理子组件传递过来的数据 this.eventData = data; } } }; </script> ``` 在父组件中使用`<child-component>`标签引入子组件,并使用`@custom-event`来监听子组件触发的事件。在`handleCustomEvent`方法中,可以获取到子组件传递过来的数据,并进行相应的处理。 这样子组件就可以通过自定义事件将数据传递给父组件,并由父组件进行相应的处理了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值