吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 936|回复: 5
收起左侧

[求助] vue3,条件渲染dom元素的问题

[复制链接]
cqwcns 发表于 2023-1-18 21:51
场景是这样的,在vue3应用中,我使用了富文本编辑器(ckeditor)。
我需要在工具栏中添加自定义的按钮,由于富文本编辑器的工具栏是动态生成dom元素的,所以我无法直接在html中添加元素,只能通过h()+render()向工具栏添加dom元素。


以下代码,自定义按钮我是成功添加了,但我希望根据isEditorFullScreen变量,来条件渲染icon,自己尝试了两种方法,但都不行(见注释代码)。
所以,如果要向ckeditor工具栏添加按钮,且根据条件渲染icon,有什么办法实现?请各位大佬指教,感谢。

[HTML] 纯文本查看 复制代码
<ckeditor :editor="editor" v-model="editorData" :config="editorConfig" :disabled="editorDisabled"
            @ready="onEditorReady"></ckeditor>


[JavaScript] 纯文本查看 复制代码
import { ref, h, render } from 'vue';
import iconFullScreen from '../components/icons/iconFullScreen.vue';
import iconZoom from '../components/icons/iconZoom.vue';

const isEditorFullScreen = ref(false);

const onEditorReady = () => {
  console.log('EditorReady');
  // 获取父元素
  const domEditorToolBar = document.getElementsByClassName('ck-toolbar__items')[0];

  // 创建子元素,单个icon,渲染正常
  const domEditorFullScreenBtn = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, h(iconFullScreen));

  // 尝试使用三元表达式切换icon,但发现不是动态的,只会按初始值渲染,失败
  // const domEditorFullScreenBtn = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, h(isEditorFullScreen ? iconZoom : iconFullScreen));

  // 尝试使用条件渲染,发现条件不生效,两个icon都会渲染出来,失败
  // const domEditorFullScreenBtn = h('button', { class: 'ck ck-button', onClick: doEditorFullScreen }, [h(iconFullScreen, { 'v-if': 'isEditorFullScreen' }), h(iconZoom, { 'v-if': '!isEditorFullScreen' })]);

  // 渲染
  render(domEditorFullScreenBtn, domEditorToolBar);
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

CTG嗜血 发表于 2023-1-19 10:26
这应该要监听isEditorFullScreen变量,然后创建不同icon
Mr.[先知] 发表于 2023-1-19 11:33
这种用法 就是错误的方法
vue就不建议操作dom
就算想操作也是用ref去做

我找了下 编辑器是有这样的函数
editor.ui.getEditableElement().parentElement.insertBefore(
        editor.ui.view.toolbar.element,

        editor.ui.getEditableElement()
你可以查看相关文档

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

Mr.[先知] 发表于 2023-1-19 11:36
组件式的开发 就不要用这种侵入式的操作了
让组件自我管理 内部的一切
外部调用来给他约束
ck好像是可以注入config吧
你可以考虑这方面

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

 楼主| cqwcns 发表于 2023-1-19 15:43
Mr.[先知] 发表于 2023-1-19 11:36
组件式的开发 就不要用这种侵入式的操作了
让组件自我管理 内部的一切
外部调用来给他约束

官方的方法添加工具自定义按钮,我反复测试都不成功,总是报错:
CKEditorError: ckeditor-duplicated-modules
Mr.[先知] 发表于 2023-1-19 21:37
cqwcns 发表于 2023-1-19 15:43
官方的方法添加工具自定义按钮,我反复测试都不成功,总是报错:
CKEditorError: ckeditor-duplicated-m ...

报错 很有可能是参数写错了 参数是有类型的 比如 string的整数 这种 有的要object

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表