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 | 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
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 () { | ... | ... |