Commit 5b143a2b3f0d690f6a48b251203c68de97abe55d

Authored by 梁灏
1 parent c9985ada

fixed #5401 , close #5403

examples/routers/tabs.vue
1 <template> 1 <template>
2 - <Tabs type="card" :animated="true" closable @on-tab-remove="handleTabRemove" :beforeRemove="handleBeforeRemove">  
3 - <Wrapper>  
4 - <TabPane label="标签一" v-if="tab0">标签一的内容</TabPane>  
5 - <TabPane label="标签二" v-if="tab1">标签二的内容</TabPane>  
6 - <TabPane label="标签三" v-if="tab2">标签三的内容</TabPane>  
7 - </Wrapper>  
8 - </Tabs>  
9 -  
10 - <!--<Tabs type="card" :animated="true" closable @on-tab-remove="handleTabRemove" :beforeRemove="handleBeforeRemove">-->  
11 - <!--<TabPane label="标签一" v-if="tab0">标签一的内容</TabPane>-->  
12 - <!--<TabPane label="标签二" v-if="tab1">标签二的内容</TabPane>-->  
13 - <!--<TabPane label="标签三" v-if="tab2">标签三的内容</TabPane>-->  
14 - <!--</Tabs>--> 2 + <div>
  3 + <Button @click="showSecond = !showSecond">change</Button>
  4 + <Tabs value="name1">
  5 + <TabPane label="标签一" name="name1" :index="1">标签一的内容</TabPane>
  6 + <TabPane label="标签二" name="name2" :index="2" v-if="showSecond">标签二的内容</TabPane>
  7 + <TabPane label="标签三" name="name3" :index="3">标签三的内容</TabPane>
  8 + </Tabs>
  9 + </div>
15 </template> 10 </template>
16 <script> 11 <script>
17 - import Wrapper from '../components/wrapper.vue';  
18 export default { 12 export default {
19 - components: { Wrapper },  
20 data () { 13 data () {
21 return { 14 return {
22 - tab0: true,  
23 - tab1: true,  
24 - tab2: true  
25 - }  
26 - },  
27 - methods: {  
28 - handleTabRemove (name) {  
29 - this['tab' + name] = false;  
30 - },  
31 - handleBeforeRemove (index) {  
32 - console.log(index);  
33 -  
34 - return new Promise((resolve, reject) => {  
35 - this.$Modal.confirm({  
36 - title: 'Title',  
37 - content: '<p>Content of dialog</p><p>Content of dialog</p>',  
38 - onOk: () => {  
39 - resolve();  
40 - },  
41 - onCancel: () => {  
42 - reject();  
43 - }  
44 - });  
45 - }); 15 + showSecond: false
46 } 16 }
47 } 17 }
48 } 18 }
src/components/tabs/pane.vue
@@ -30,6 +30,11 @@ @@ -30,6 +30,11 @@
30 tab: { 30 tab: {
31 type: String 31 type: String
32 }, 32 },
  33 + // 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序
  34 + // 数值需大于 0
  35 + index: {
  36 + type: Number
  37 + }
33 }, 38 },
34 data () { 39 data () {
35 return { 40 return {
src/components/tabs/tabs.vue
@@ -187,6 +187,14 @@ @@ -187,6 +187,14 @@
187 } 187 }
188 }); 188 });
189 189
  190 + // 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序
  191 + TabPanes.sort((a, b) => {
  192 + if (a.index && b.index) {
  193 + return a.index > b.index ? 1 : -1;
  194 + } else {
  195 + return 1;
  196 + }
  197 + });
190 return TabPanes; 198 return TabPanes;
191 }, 199 },
192 updateNav () { 200 updateNav () {