fix(Tab): fix getComputedName of undefined error (#2376)

fix #2335
This commit is contained in:
rex 2019-11-25 14:57:57 +08:00 committed by GitHub
parent 8e65117205
commit 45f4c6c133
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 12 deletions

View File

@ -50,7 +50,8 @@ VantComponent({
this.inited = this.inited || active; this.inited = this.inited || active;
this.setData({ this.setData({
active, active,
shouldRender: this.inited || !parentData.lazyRender shouldRender: this.inited || !parentData.lazyRender,
shouldShow: active || parentData.animated
}); });
}, },

View File

@ -1,8 +1,8 @@
<wxs src="../wxs/utils.wxs" module="utils" /> <wxs src="../wxs/utils.wxs" module="utils" />
<view <view
wx:if="{{ shouldRender }}"
class="custom-class {{ utils.bem('tab__pane', { active, inactive: !active }) }}" class="custom-class {{ utils.bem('tab__pane', { active, inactive: !active }) }}"
style="{{ shouldShow ? '' : 'display: none;' }}"
> >
<slot /> <slot wx:if="{{ shouldRender }}" />
</view> </view>

View File

@ -73,11 +73,14 @@
&__track { &__track {
position: relative; position: relative;
display: flex;
width: 100%; width: 100%;
height: 100%; height: 100%;
&--animated {
display: flex;
transition-property: transform; transition-property: transform;
} }
}
&__content { &__content {
overflow: hidden; overflow: hidden;

View File

@ -37,7 +37,10 @@ VantComponent({
sticky: Boolean, sticky: Boolean,
animated: { animated: {
type: Boolean, type: Boolean,
observer: 'setTrack' observer() {
this.setTrack();
this.children.forEach((child: TrivialInstance) => child.updateRender());
}
}, },
swipeable: Boolean, swipeable: Boolean,
lineWidth: { lineWidth: {
@ -139,6 +142,10 @@ VantComponent({
const child = this.children[currentIndex]; const child = this.children[currentIndex];
if (!isDef(child)) {
return;
}
this.$emit(eventName, { this.$emit(eventName, {
index: currentIndex, index: currentIndex,
name: child.getComputedName(), name: child.getComputedName(),
@ -181,9 +188,6 @@ VantComponent({
return; return;
} }
const shouldEmitChange = data.currentIndex !== null;
this.setData({ currentIndex });
children.forEach((item: TrivialInstance, index: number) => { children.forEach((item: TrivialInstance, index: number) => {
const active = index === currentIndex; const active = index === currentIndex;
if (active !== item.data.active || !item.inited) { if (active !== item.data.active || !item.inited) {
@ -191,6 +195,13 @@ VantComponent({
} }
}); });
if (currentIndex === data.currentIndex) {
return;
}
const shouldEmitChange = data.currentIndex !== null;
this.setData({ currentIndex });
wx.nextTick(() => { wx.nextTick(() => {
this.setLine(); this.setLine();
this.setTrack(); this.setTrack();
@ -263,11 +274,15 @@ VantComponent({
setTrack() { setTrack() {
const { animated, duration, currentIndex } = this.data; const { animated, duration, currentIndex } = this.data;
if (!animated) {
return;
}
this.setData({ this.setData({
trackStyle: ` trackStyle: `
transform: translate3d(${-100 * currentIndex}%, 0, 0); transform: translate3d(${-100 * currentIndex}%, 0, 0);
-webkit-transition-duration: ${animated ? duration : 0}s; -webkit-transition-duration: ${duration}s;
transition-duration: ${animated ? duration : 0}s; transition-duration: ${duration}s;
` `
}); });
}, },

View File

@ -53,7 +53,7 @@
bind:touchend="onTouchEnd" bind:touchend="onTouchEnd"
bind:touchcancel="onTouchEnd" bind:touchcancel="onTouchEnd"
> >
<view class="van-tabs__track" style="{{ trackStyle }}"> <view class="{{ utils.bem('tabs__track', [{ animated }]) }} van-tabs__track" style="{{ trackStyle }}">
<slot /> <slot />
</view> </view>
</view> </view>