diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 83273880..4e8ea9b0 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -31,6 +31,8 @@ class MindMap { constructor(opt = {}) { // 合并选项 this.opt = this.handleOpt(merge(defaultOpt, opt)) + // 预处理节点数据 + this.opt.data = this.handleData(this.opt.data) // 容器元素 this.el = this.opt.el @@ -98,8 +100,6 @@ class MindMap { // 配置参数处理 handleOpt(opt) { - // 深拷贝一份节点数据 - opt.data = this.handleData(opt.data) // 检查布局配置 if (!layoutValueList.includes(opt.layout)) { opt.layout = CONSTANTS.LAYOUT.LOGICAL_STRUCTURE @@ -113,7 +113,7 @@ class MindMap { handleData(data) { data = simpleDeepClone(data || {}) // 根节点不能收起 - if (!data.data.expand) { + if (data.data && !data.data.expand) { data.data.expand = true } return data @@ -319,6 +319,7 @@ class MindMap { // 动态设置思维导图数据,纯节点数据 setData(data) { data = this.handleData(data) + this.opt.data = data this.execCommand('CLEAR_ACTIVE_NODE') this.command.clearHistory() this.command.addHistory() diff --git a/simple-mind-map/src/plugins/Cooperate.js b/simple-mind-map/src/plugins/Cooperate.js index 68be66f9..2f304d1d 100644 --- a/simple-mind-map/src/plugins/Cooperate.js +++ b/simple-mind-map/src/plugins/Cooperate.js @@ -28,6 +28,8 @@ class Cooperate { this.currentData = null // 用户信息 this.userInfo = null + // 是否正在重新设置思维导图数据 + this.isSetData = false // 绑定事件 this.bindEvent() // 处理实例化时传入的思维导图数据 @@ -92,8 +94,8 @@ class Cooperate { this.mindMap.on('node_tree_render_end', this.onNodeTreeRenderEnd) // 监听设置思维导图数据事件 - this.initData = this.initData.bind(this) - this.mindMap.on('set_data', this.initData) + this.onSetData = this.onSetData.bind(this) + this.mindMap.on('set_data', this.onSetData) } // 解绑事件 @@ -104,7 +106,7 @@ class Cooperate { this.mindMap.off('data_change', this.onDataChange) this.mindMap.off('node_active', this.onNodeActive) this.mindMap.off('node_tree_render_end', this.onNodeTreeRenderEnd) - this.mindMap.off('set_data', this.initData) + this.mindMap.off('set_data', this.onSetData) this.ydoc.destroy() } @@ -125,6 +127,10 @@ class Cooperate { // 当前思维导图改变后的处理,触发同步 onDataChange(data) { + if (this.isSetData) { + this.isSetData = false + return + } const res = transformTreeDataToObject(data) this.updateChanges(res) } @@ -143,7 +149,7 @@ class Cooperate { createOrUpdateList.push({ uid, data: data[uid], - oldData: oldData[uid], + oldData: oldData[uid] }) } }) @@ -203,6 +209,12 @@ class Cooperate { this.waitNodeUidMap = {} } + // 监听思维导图数据的重新设置事件 + onSetData(data) { + this.isSetData = true + this.initData(data) + } + // 设置用户信息 /** * {