浏览代码

[tree]添加node-open与node-close事件,共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。

张华焱 8 年之前
父节点
当前提交
7d09486968
共有 2 个文件被更改,包括 43 次插入0 次删除
  1. 2 0
      packages/tree/src/tree-node.vue
  2. 41 0
      test/unit/specs/tree.spec.js

+ 2 - 0
packages/tree/src/tree-node.vue

@@ -146,8 +146,10 @@
 
       handleExpandIconClick() {
         if (this.expanded) {
+          this.tree.$emit('node-close', this.node.data, this.node, this);
           this.node.collapse();
         } else {
+          this.tree.$emit('node-open', this.node.data, this.node, this);
           this.node.expand();
           this.$emit('node-expand', this.node.data, this.node, this);
         }

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

@@ -369,4 +369,45 @@ describe('Tree', () => {
       }, DELAY);
     }, DELAY);
   });
+
+  it('handleNodeOpen & handleNodeClose', (done) => {
+    vm = getTreeVm(':props="defaultProps" lazy :load="loadNode" @node-open="handleNodeOpen" @node-close="handleNodeClose"', {
+      methods: {
+        loadNode(node, resolve) {
+          if (node.level === 0) {
+            return resolve([{label: 'region1'}, {label: 'region2'}]);
+          }
+          if (node.level > 4) return resolve([]);
+          setTimeout(() => {
+            resolve([{
+              label: 'zone' + this.count++
+            }, {
+              label: 'zone' + this.count++
+            }]);
+          }, 50);
+        },
+        handleNodeOpen(data, node, vm) {
+          this.currentNode = data;
+          this.nodeExpended = true;
+        },
+        handleNodeClose(data, node, vm) {
+          this.currentNode = data;
+          this.nodeExpended = false;
+        }
+      }
+    });
+    const firstNode = document.querySelector('.el-tree-node__content');
+    expect(firstNode.nextElementSibling.childNodes.length).to.equal(0);
+    firstNode.click();
+    setTimeout(() => {
+      expect(vm.nodeExpended).to.equal(true);
+      expect(vm.currentNode.label).to.equal('region1');
+      firstNode.click();
+      setTimeout(() => {
+        expect(vm.nodeExpended).to.equal(false);
+        expect(vm.currentNode.label).to.equal('region1');
+        done();
+      }, 100);
+    }, 100);
+  });
 });