haochuan9421/vue-ueditor-wrap

封装以后如何调用原生的detroy方法?

waveheart opened this issue · 6 comments

封装以后的实例上找不到原生的方法
在以下场景会报错
绑定的value,在跳转新页面前有时候会做清空操作,这时候value的值发生变化,但是Ueditor的绑定是一个异步过程,此时页面已销毁,找不到UE实例,DOM渲染会出错

Uncaught TypeError: Cannot set property 'innerHTML' of null
at baidu.editor.ui.Message.setContent (ueditor.all.min.js:17)
at baidu.editor.ui.Message.reset (ueditor.all.min.js:17)
at UE.Editor. (ueditor.all.min.js:18)
at UE.Editor.fireEvent (ueditor.all.min.js:7)
at UE.Editor.trigger (ueditor.all.min.js:7)
at ueditor.all.min.js:18

问题补充: 应该是由keep-alive引起的。ueditor的内容做的本地存储。不在keep-alive之内

这个和keep-alive关系不大,主要原因是autoSave
qq20180711-174630 2x
Ueditor默认配置是每次contentChange的500ms后自动保存编辑器内容到localStorage
qq20180711-162148 2x
 当你跳转路由的时候,挂在this上的editor实例已经被销毁,但是异步的autoSave还是会执行,此时就会出现各种null的错误。如果我没猜错的,这种报错的时机是:你刚输入完内容,编辑器右上角还没有出现本地保存成功的提示,你就点击跳转路由了。这种报错对你项目不会有太大影响.
 所以只要把没什么卵用的autoSave关闭即可,但是ueditor的1.4.3.3版本enableAutoSave: false是无效的,所以我修改了一下源码并把编译后的资源文件放在了dist目录下,你可以下载替换。
 我也在组件的beforeDestory钩子里调用了实例的destory方法(其实没什么用,只是把大部分实例属性销毁并换成textarea),如果你想更新的话,可以执行npm i vue-ueditor-wrap@1.3.3
 当然还有一种取巧的方式,你把自动保存的周期设置的非常大也可以。

完美

完美,谢谢大佬,大佬牛逼,大佬six six six!

caiya commented

怎么我使用的时候每次刷新页面都会报错:
image

第一次打开却是ok的不报错呢

我想让它能自动保存,又不想跳转页面的时候报各种null错误,我该咋办呢?求解!谢谢!