diff --git a/simple-mind-map/index.js b/simple-mind-map/index.js index 71075b36..26715799 100644 --- a/simple-mind-map/index.js +++ b/simple-mind-map/index.js @@ -15,7 +15,7 @@ import { cssContent } from './src/constants/constant' import { SVG } from '@svgdotjs/svg.js' -import { simpleDeepClone, getType } from './src/utils' +import { simpleDeepClone, getType, getObjectChangedProps } from './src/utils' import defaultTheme, { checkIsNodeSizeIndependenceConfig } from './src/themes/default' @@ -201,9 +201,11 @@ class MindMap { // 设置主题配置 setThemeConfig(config) { + // 计算改变了的配置 + const changedConfig = getObjectChangedProps(this.themeConfig, config) this.opt.themeConfig = config // 检查改变的是否是节点大小无关的主题属性 - let res = checkIsNodeSizeIndependenceConfig(config) + let res = checkIsNodeSizeIndependenceConfig(changedConfig) this.render(null, res ? '' : CONSTANTS.CHANGE_THEME) } diff --git a/simple-mind-map/src/themes/default.js b/simple-mind-map/src/themes/default.js index addc497a..34bd20b6 100644 --- a/simple-mind-map/src/themes/default.js +++ b/simple-mind-map/src/themes/default.js @@ -158,7 +158,8 @@ const nodeSizeIndependenceList = [ 'backgroundImage', 'backgroundRepeat', 'backgroundPosition', - 'backgroundSize' + 'backgroundSize', + 'rootLineKeepSameInCurve' ] export const checkIsNodeSizeIndependenceConfig = (config) => { let keys = Object.keys(config) diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index c934eca6..405e2c56 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -632,3 +632,28 @@ export const isMobile = () => { navigator.userAgent ) } + +// 获取对象改变了的的属性 +export const getObjectChangedProps = (oldObject, newObject) => { + const res = {} + Object.keys(newObject).forEach((prop) => { + const oldVal = oldObject[prop] + const newVal = newObject[prop] + if (getType(oldVal) !== getType(newVal)) { + res[prop] = newVal + return + } + if (getType(oldVal) === 'Object') { + if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { + res[prop] = newVal + return + } + } else { + if (oldVal !== newVal) { + res[prop] = newVal + return + } + } + }) + return res +} \ No newline at end of file