haochuan9421 / vue-ueditor-wrap

🚴Vue + 🚄UEditor + v-model双向绑定🚀
https://hc199421.gitee.io/vue-ueditor-wrap/
MIT License
1.6k stars 449 forks source link

草稿功能有缺陷 #125

Closed suguoyao closed 4 years ago

suguoyao commented 4 years ago

你遇到了什么 BUG 开启enableAutoSave自动保存后,内容会存入localstorage,但刷新页面后点击恢复草稿无效。

如何复现 复现 BUG 的步骤:

  1. 输入内容,自动保存
  2. 刷新页面
  3. 点击“从草稿箱加载”按钮,无效

是 UEditor 的 BUG 还是组件的 BUG 看了下源码是组件的bug,每次实例化时都会动态生成父容器的editorId,草稿对应的缓存key也和id挂钩,所以导致刷新页面重新加载编辑器时,id已经无法对应上了。

this.id = 'editor_' + Math.random().toString(16).slice(-6)

你是否查阅了 README 中的常见问题和其他 ISSUE 已查阅,没有发现我遇到的问题

截图

开发环境

suguoyao commented 4 years ago

已自己重写组件解决

_initEditor() {
     // 这么做是为了支持 Vue SSR,因为如果把 id 属性放在 data 里会导致服务端和客户端分别计算该属性的值,而造成 id 
不匹配无法初始化的 BUG
    this.$refs.script.id = this.id = 'editor_' + Math.random().toString(16).slice(-6)
...

改为接收一个自定义editorId的prop

...
props: {
    editorId: {
        type: String,
        default: 'editor_' + Math.random().toString(16).slice(-6)
     }
},
...
_initEditor() {
    this.$refs.script.id = this.id = this.editorId
...
haochuan9421 commented 4 years ago

谢谢你的反馈,确实存在这个问题哈,安装最新版本组件并手动设置 editorId 属性就可以了。

<vue-ueditor-wrap v-model="msg" editor-id="sometext" ></vue-ueditor-wrap>

如果你的项目是服务端渲染的就不要按照你上面的那种方式改哈,会导致编辑器无法初始化的,如果不是就没太大关系,你可以看一下我最新的提交记录

suguoyao commented 4 years ago

@HaoChuan9421 谢谢~