[bugfix] Tab: title slot render (#1212)

This commit is contained in:
neverland 2018-05-31 17:58:59 +08:00 committed by GitHub
parent 3fa49cdd3e
commit 9b01710556
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 82 additions and 38 deletions

View File

@ -1,6 +1,9 @@
<template>
<div :class="b('pane')" v-show="isSelected">
<slot v-if="inited" />
<div v-if="$slots.title" ref="title">
<slot name="title" />
</div>
</div>
</template>
@ -45,6 +48,12 @@ export default create({
this.parent.tabs.push(this);
},
mounted() {
if (this.$slots.title) {
this.parent.renderTitle(this.$refs.title, this.index);
}
},
destroyed() {
this.parent.tabs.splice(this.index, 1);
}

View File

@ -12,15 +12,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -35,27 +39,35 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -70,15 +82,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -93,15 +109,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -116,15 +136,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -139,15 +163,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>
@ -162,9 +190,23 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
<div>
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;">
<!---->
</i>选项
</div>
</div>
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<div>
<div>
<i class="van-icon van-icon-more-o" style="color:undefined;">
<!---->
</i>选项
</div>
</div>
</div>
</div>
</div>
@ -179,15 +221,19 @@ exports[`renders demo correctly 1`] = `
<div class="van-tabs__content">
<div class="van-tab__pane">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
<div class="van-tab__pane" style="display:none;">
<!---->
<!---->
</div>
</div>
</div>

View File

@ -19,8 +19,7 @@
}"
@click="onClick(index)"
>
<van-node v-if="tab.$slots.title" :node="tab.$slots.title" />
<span class="van-ellipsis" v-else>{{ tab.title }}</span>
<span class="van-ellipsis" ref="title">{{ tab.title }}</span>
</div>
</div>
</div>
@ -34,7 +33,6 @@
import create from '../utils/create';
import { raf } from '../utils/raf';
import { on, off } from '../utils/event';
import VanNode from '../utils/node';
import scrollUtils from '../utils/scroll';
import Touch from '../mixins/touch';
@ -43,10 +41,6 @@ export default create({
mixins: [Touch],
components: {
VanNode
},
model: {
prop: 'active'
},
@ -261,6 +255,14 @@ export default create({
}
};
animate();
},
// render title slot of child tab
renderTitle(el, index) {
this.$nextTick(() => {
const title = this.$refs.title[index];
title.parentNode.replaceChild(el, title);
});
}
}
});

View File

@ -1,13 +0,0 @@
/**
* VNode helper
*/
export default {
name: 'van-node',
functional: true,
props: {
node: Array
},
render(h, ctx) {
return ctx.props.node;
}
};