Commit 5b143a2b3f0d690f6a48b251203c68de97abe55d
1 parent
c9985ada
fixed #5401 , close #5403
Showing
3 changed files
with
22 additions
and
39 deletions
Show diff stats
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
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 () { |