From 7d09486968e94dede8fb2853dd5c8293661453b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8D=8E=E7=84=B1?= <448158404@qq.com> Date: Wed, 18 Jan 2017 17:16:07 +0800 Subject: [PATCH] =?UTF-8?q?[tree]=E6=B7=BB=E5=8A=A0node-open=E4=B8=8Enode-?= =?UTF-8?q?close=E4=BA=8B=E4=BB=B6=EF=BC=8C=E5=85=B1=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=8C=E4=BE=9D=E6=AC=A1=E4=B8=BA=EF=BC=9A?= =?UTF-8?q?=E4=BC=A0=E9=80=92=E7=BB=99=20data=20=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E7=BB=84=E4=B8=AD=E8=AF=A5=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=89=80=E5=AF=B9=E5=BA=94=E7=9A=84=E5=AF=B9=E8=B1=A1=E3=80=81?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=AF=B9=E5=BA=94=E7=9A=84=20Node=E3=80=81?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E7=BB=84=E4=BB=B6=E6=9C=AC=E8=BA=AB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/tree/src/tree-node.vue | 2 ++ test/unit/specs/tree.spec.js | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/packages/tree/src/tree-node.vue b/packages/tree/src/tree-node.vue index b94dc6858..b5a569d21 100644 --- a/packages/tree/src/tree-node.vue +++ b/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); } diff --git a/test/unit/specs/tree.spec.js b/test/unit/specs/tree.spec.js index a8213f5b3..f2a532729 100644 --- a/test/unit/specs/tree.spec.js +++ b/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); + }); });