Bläddra i källkod

Cascader: fix emitPath (#21185)

好多大米 4 år sedan
förälder
incheckning
19f25baffc

+ 11 - 3
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)];
       }

+ 3 - 7
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;
   }
-
 }

+ 11 - 3
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);