封装以后如何调用原生的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
。
Ueditor默认配置是每次contentChange
的500ms后自动保存编辑器内容到localStorage
当你跳转路由的时候,挂在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!
我想让它能自动保存,又不想跳转页面的时候报各种null错误,我该咋办呢?求解!谢谢!