Commit 5b143a2b3f0d690f6a48b251203c68de97abe55d

Authored by 梁灏
1 parent c9985ada

fixed #5401 , close #5403

examples/routers/tabs.vue
1 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 10 </template>
16 11 <script>
17   - import Wrapper from '../components/wrapper.vue';
18 12 export default {
19   - components: { Wrapper },
20 13 data () {
21 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 30 tab: {
31 31 type: String
32 32 },
  33 + // 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序
  34 + // 数值需大于 0
  35 + index: {
  36 + type: Number
  37 + }
33 38 },
34 39 data () {
35 40 return {
... ...
src/components/tabs/tabs.vue
... ... @@ -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 198 return TabPanes;
191 199 },
192 200 updateNav () {
... ...