diff --git a/packages/cascader-panel/src/cascader-panel.vue b/packages/cascader-panel/src/cascader-panel.vue index d3fe6fb81..135391da8 100644 --- a/packages/cascader-panel/src/cascader-panel.vue +++ b/packages/cascader-panel/src/cascader-panel.vue @@ -157,7 +157,7 @@ export default { }, mounted() { - if (!isEmpty(this.value)) { + if (!this.isEmptyValue(this.value)) { this.syncCheckedValue(); } }, @@ -195,13 +195,21 @@ export default { node.syncCheckState(this.checkedValue); }); }, + isEmptyValue(val) { + const { multiple, config } = this; + const { emitPath } = config; + if (multiple || emitPath) { + return isEmpty(val); + } + return false; + }, syncActivePath() { const { store, multiple, activePath, checkedValue } = this; if (!isEmpty(activePath)) { const nodes = activePath.map(node => this.getNodeByValue(node.getValue())); this.expandNodes(nodes); - } else if (!isEmpty(checkedValue)) { + } else if (!this.isEmptyValue(checkedValue)) { const value = multiple ? checkedValue[0] : checkedValue; const checkedNode = this.getNodeByValue(value) || {}; const nodes = (checkedNode.pathNodes || []).slice(0, -1); @@ -361,7 +369,7 @@ export default { const nodes = this.getFlattedNodes(leafOnly); return nodes.filter(node => node.checked); } else { - return isEmpty(checkedValue) + return this.isEmptyValue(checkedValue) ? [] : [this.getNodeByValue(checkedValue)]; } diff --git a/packages/cascader-panel/src/store.js b/packages/cascader-panel/src/store.js index 90e68bad8..9a0ede219 100644 --- a/packages/cascader-panel/src/store.js +++ b/packages/cascader-panel/src/store.js @@ -51,12 +51,8 @@ export default class Store { } getNodeByValue(value) { - if (value) { - const nodes = this.getFlattedNodes(false, !this.config.lazy) - .filter(node => (valueEquals(node.path, value) || node.value === value)); - return nodes && nodes.length ? nodes[0] : null; - } - return null; + const nodes = this.getFlattedNodes(false, !this.config.lazy) + .filter(node => (valueEquals(node.path, value) || node.value === value)); + return nodes && nodes.length ? nodes[0] : null; } - } diff --git a/packages/cascader/src/cascader.vue b/packages/cascader/src/cascader.vue index 0546fc4ab..2458d923c 100644 --- a/packages/cascader/src/cascader.vue +++ b/packages/cascader/src/cascader.vue @@ -231,7 +231,7 @@ export default { data() { return { dropDownVisible: false, - checkedValue: this.value || null, + checkedValue: this.value, inputHover: false, inputValue: null, presentText: null, @@ -350,7 +350,7 @@ export default { this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40; } - if (!isEmpty(this.value)) { + if (!this.isEmptyValue(this.value)) { this.computePresentContent(); } @@ -485,9 +485,17 @@ export default { } }); }, + isEmptyValue(val) { + const { multiple } = this; + const { emitPath } = this.panel.config; + if (multiple || emitPath) { + return isEmpty(val); + } + return false; + }, computePresentText() { const { checkedValue, config } = this; - if (!isEmpty(checkedValue)) { + if (!this.isEmptyValue(checkedValue)) { const node = this.panel.getNodeByValue(checkedValue); if (node && (config.checkStrictly || node.isLeaf)) { this.presentText = node.getText(this.showAllLevels, this.separator);