diff --git a/packages/tab/index.vue b/packages/tab/index.vue index 83ca2f06a..e60b04426 100644 --- a/packages/tab/index.vue +++ b/packages/tab/index.vue @@ -1,6 +1,9 @@ @@ -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); } diff --git a/packages/tab/test/__snapshots__/demo.spec.js.snap b/packages/tab/test/__snapshots__/demo.spec.js.snap index e72e3fe70..b39b1035d 100644 --- a/packages/tab/test/__snapshots__/demo.spec.js.snap +++ b/packages/tab/test/__snapshots__/demo.spec.js.snap @@ -12,15 +12,19 @@ exports[`renders demo correctly 1`] = `
-
- +
@@ -35,27 +39,35 @@ exports[`renders demo correctly 1`] = `
-
- - - + + +
@@ -70,15 +82,19 @@ exports[`renders demo correctly 1`] = `
-
- +
@@ -93,15 +109,19 @@ exports[`renders demo correctly 1`] = `
-
- +
@@ -116,15 +136,19 @@ exports[`renders demo correctly 1`] = `
-
- +
@@ -139,15 +163,19 @@ exports[`renders demo correctly 1`] = `
-
- +
@@ -162,9 +190,23 @@ exports[`renders demo correctly 1`] = `
+
+
+ + + 选项 +
+
@@ -179,15 +221,19 @@ exports[`renders demo correctly 1`] = `
-
- +
diff --git a/packages/tabs/index.vue b/packages/tabs/index.vue index 3e40d0c54..1d11dde03 100644 --- a/packages/tabs/index.vue +++ b/packages/tabs/index.vue @@ -19,8 +19,7 @@ }" @click="onClick(index)" > - - {{ tab.title }} + {{ tab.title }} @@ -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); + }); } } }); diff --git a/packages/utils/node.js b/packages/utils/node.js deleted file mode 100644 index e19f98168..000000000 --- a/packages/utils/node.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * VNode helper - */ -export default { - name: 'van-node', - functional: true, - props: { - node: Array - }, - render(h, ctx) { - return ctx.props.node; - } -};