Przeglądaj źródła

Tree: fixed default-expanded-keys can not set again.

Furybean 8 lat temu
rodzic
commit
807c06071d

+ 16 - 14
packages/tree/src/model/node.js

@@ -97,15 +97,7 @@ export default class Node {
     const defaultExpandedKeys = store.defaultExpandedKeys;
     const key = store.key;
     if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {
-      if (store.autoExpandParent) {
-        let parent = this.parent;
-        while (parent.level > 0) {
-          parent.expanded = true;
-          parent = parent.parent;
-        }
-      }
-
-      this.expand();
+      this.expand(null, store.autoExpandParent);
     }
 
     if (store.lazy) {
@@ -213,17 +205,27 @@ export default class Node {
     }
   }
 
-  expand(callback) {
+  expand(callback, expandParent) {
+    const done = () => {
+      if (expandParent) {
+        let parent = this.parent;
+        while (parent.level > 0) {
+          parent.expanded = true;
+          parent = parent.parent;
+        }
+      }
+      this.expanded = true;
+      if (callback) callback();
+    };
+
     if (this.shouldLoadData()) {
       this.loadData((data) => {
         if (data instanceof Array) {
-          this.expanded = true;
-          if (callback) callback();
+          done();
         }
       });
     } else {
-      this.expanded = true;
-      if (callback) callback();
+      done();
     }
   }
 

+ 17 - 6
packages/tree/src/model/tree-store.js

@@ -66,30 +66,30 @@ export default class TreeStore {
     }
   }
 
-  getNodeByData(data) {
-    const key = typeof data === 'string' ? data : getNodeKey(this.key, data);
+  getNode(data) {
+    const key = typeof data !== 'object' ? data : getNodeKey(this.key, data);
     return this.nodesMap[key];
   }
 
   insertBefore(data, refData) {
-    const refNode = this.getNodeByData(refData);
+    const refNode = this.getNode(refData);
     refNode.parent.insertBefore({ data }, refNode);
   }
 
   insertAfter(data, refData) {
-    const refNode = this.getNodeByData(refData);
+    const refNode = this.getNode(refData);
     refNode.parent.insertAfter({ data }, refNode);
   }
 
   remove(data) {
-    const node = this.getNodeByData(data);
+    const node = this.getNode(data);
     if (node) {
       node.parent.removeChild(node);
     }
   }
 
   append(data, parentData) {
-    const parentNode = parentData ? this.getNodeByData(parentData) : this.root;
+    const parentNode = parentData ? this.getNode(parentData) : this.root;
 
     if (parentNode) {
       parentNode.insertChild({ data });
@@ -206,6 +206,7 @@ export default class TreeStore {
   }
 
   setCheckedKeys(keys, leafOnly = true) {
+    this.defaultCheckedKeys = keys;
     const key = this.key;
     const checkedKeys = {};
     keys.forEach((key) => {
@@ -214,4 +215,14 @@ export default class TreeStore {
 
     this._setCheckedKeys(key, leafOnly, checkedKeys);
   }
+
+  setDefaultExpandedKeys(keys) {
+    keys = keys || [];
+    this.defaultExpandedKeys = keys;
+
+    keys.forEach((key) => {
+      const node = this.getNode(key);
+      if (node) node.expand(null, this.autoExpandParent);
+    });
+  }
 };

+ 8 - 3
packages/tree/src/tree.vue

@@ -106,11 +106,16 @@
     },
 
     watch: {
-      data(newVal) {
-        this.store.setData(newVal);
-      },
       defaultCheckedKeys(newVal) {
+        this.store.defaultCheckedKeys = newVal;
         this.store.setDefaultCheckedKey(newVal);
+      },
+      defaultExpandedKeys(newVal) {
+        this.store.defaultExpandedKeys = newVal;
+        this.store.setDefaultExpandedKeys(newVal);
+      },
+      data(newVal) {
+        this.store.setData(newVal);
       }
     },
 

+ 15 - 0
test/unit/specs/tree.spec.js

@@ -127,6 +127,21 @@ describe('Tree', () => {
     expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
   });
 
+  it('defaultExpandedKeys set', (done) => {
+    vm = getTreeVm(':props="defaultProps" :default-expanded-keys="defaultExpandedKeys" node-key="id"', {
+      created() {
+        this.defaultExpandedKeys = [1, 3];
+      }
+    });
+    expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(2);
+    vm.defaultExpandedKeys = [2];
+    vm.data = JSON.parse(JSON.stringify(vm.data));
+    setTimeout(() => {
+      expect(vm.$el.querySelectorAll('.el-tree-node.is-expanded').length).to.equal(1);
+      done();
+    }, 50);
+  });
+
   it('filter-node-method', (done) => {
     vm = getTreeVm(':props="defaultProps" :filter-node-method="filterNode"', {
       methods: {