From 6a42b664038aff426bd87fb7935f2b3fa54346b5 Mon Sep 17 00:00:00 2001 From: baiyaaaaa <bigpet1991@gmail.com> Date: Wed, 28 Sep 2016 15:20:50 +0800 Subject: [PATCH] fixed tabs bug when close tab --- CHANGELOG.md | 1 + examples/docs/tabs.md | 8 ++++---- packages/tabs/src/tab-pane.vue | 4 ++++ packages/tabs/src/tabs.vue | 14 +++++--------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31daa3bd8..1c4f8fe79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - 修复 DatePicker 初始值是合法时间类型但无法设置成功的问题 - 修复 Pagination 的图标没有正确切换样式, #163 - 修复 Row 组件 align 属性不生效的问题 +- 修复 Tabs 关闭标签页时对应 Tab-panel 没有移除的问题 #### 非兼容性更新 - Menu 组件的 `unique-opend` 属性修正为 `unique-opened` diff --git a/examples/docs/tabs.md b/examples/docs/tabs.md index ef5495eab..07df20160 100644 --- a/examples/docs/tabs.md +++ b/examples/docs/tabs.md @@ -27,8 +27,8 @@ ```html <template> - <el-tabs :active-name="activeName"> - <el-tab-pane name="first" label="用户管理"></el-tab-pane> + <el-tabs> + <el-tab-pane label="用户管理"></el-tab-pane> <el-tab-pane label="配置管理"></el-tab-pane> <el-tab-pane label="角色管理"></el-tab-pane> <el-tab-pane label="定时任务补偿"></el-tab-pane> @@ -126,7 +126,7 @@ |---------- |-------- |---------- |------------- |-------- | | type | 风格类型 | string | card, border-card | — | | closable | 标签是否可关闭 | boolean | true, false | false | -| active-name | 选中选项卡的 name | string | — | — | +| active-name | 选中选项卡的 name | string | — | 第一个选项卡的 name | ### Tabs Events | 事件名称 | 说明 | 回调参数 | @@ -138,4 +138,4 @@ | 参数 | 说明 | 类型 | 可选值 | 默认值 | |---------- |-------- |---------- |------------- |-------- | | label | 选项卡标题 | string | — | — | -| name | 与选项卡 activeName 对应的标识符,表示选项卡别名 | string | — | 该选项卡在选项卡中的 name 值,如第一个选项卡则为'1' | +| name | 与选项卡 activeName 对应的标识符,表示选项卡别名 | string | — | 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1' | diff --git a/packages/tabs/src/tab-pane.vue b/packages/tabs/src/tab-pane.vue index 9d9889f03..6b51a12b1 100644 --- a/packages/tabs/src/tab-pane.vue +++ b/packages/tabs/src/tab-pane.vue @@ -33,6 +33,10 @@ } }, + destroyed() { + this.$el.remove(); + }, + watch: { name: { immediate: true, diff --git a/packages/tabs/src/tabs.vue b/packages/tabs/src/tabs.vue index 1e6ea1906..74ef7190d 100644 --- a/packages/tabs/src/tabs.vue +++ b/packages/tabs/src/tabs.vue @@ -29,8 +29,7 @@ watch: { activeName: { handler(val) { - var fisrtKey = this.$children[0] && this.$children[0].key || '1'; - this.currentName = val || fisrtKey; + this.currentName = val; } }, @@ -51,9 +50,8 @@ } if (tab.key === this.currentName) { - let deleteIndex = this.$children.indexOf(tab); - let nextChild = this.$children[deleteIndex + 1]; - let prevChild = this.$children[deleteIndex - 1]; + let nextChild = this.tabs[index]; + let prevChild = this.tabs[index - 1]; this.currentName = nextChild ? nextChild.key : prevChild ? prevChild.key : '-1'; } @@ -90,10 +88,8 @@ } }, mounted() { - if (!this.currentName) { - var fisrtKey = this.$children[0] && this.$children[0].key || '1'; - this.currentName = this.activeName || fisrtKey; - } + var fisrtKey = this.$children[0].key || '1'; + this.currentName = this.activeName || fisrtKey; this.$children.forEach(tab => this.tabs.push(tab)); this.$nextTick(() => this.calcBarStyle(true)); }