diff --git a/packages/tabs/src/tab-nav.vue b/packages/tabs/src/tab-nav.vue index 19096f281..2d1ac30d1 100644 --- a/packages/tabs/src/tab-nav.vue +++ b/packages/tabs/src/tab-nav.vue @@ -35,6 +35,10 @@ data() { return { scrollable: false, + scrollState: { + prev: 0, + next: false + }, navOffset: 0, isFocus: false, focusable: true @@ -121,9 +125,9 @@ if (containerSize < navSize) { const currentOffset = this.navOffset; - this.scrollable = this.scrollable || {}; - this.scrollable.prev = currentOffset; - this.scrollable.next = currentOffset + containerSize < navSize; + this.scrollable = true; + this.scrollState.prev = currentOffset; + this.scrollState.next = currentOffset + containerSize < navSize; if (navSize - currentOffset < containerSize) { this.navOffset = navSize - containerSize; } @@ -203,6 +207,7 @@ onTabRemove, navStyle, scrollable, + scrollState, scrollNext, scrollPrev, changeTab, @@ -211,8 +216,8 @@ } = this; const scrollBtn = scrollable ? [ - , - + , + ] : null; const tabs = this._l(panes, (pane, index) => { diff --git a/test/unit/specs/tabs.spec.js b/test/unit/specs/tabs.spec.js index 75702fcee..da914bf72 100644 --- a/test/unit/specs/tabs.spec.js +++ b/test/unit/specs/tabs.spec.js @@ -499,6 +499,44 @@ describe('Tabs', () => { }); }, 100); }); + it('nav btn disabled', done => { + vm = createVue({ + template: ` + + A + B + A + B + A + B + D + + ` + }, true); + + setTimeout(_ => { + const btnPrev = vm.$el.querySelector('.el-tabs__nav-prev'); + btnPrev.click(); + vm.$nextTick(_ => { + const tabNav = vm.$el.querySelector('.el-tabs__nav-wrap'); + expect(tabNav.__vue__.scrollState.prev).to.be.equal(0); + expect(btnPrev.classList.contains('is-disabled')).to.be.true; + expect(tabNav.__vue__.scrollState.next).to.be.true; + + const btnNext = vm.$el.querySelector('.el-tabs__nav-next'); + const clickNext = () => { + if (tabNav.__vue__.scrollState.next) { + btnNext.click(); + setTimeout(_ => { clickNext(); }, 500); // wait for transition end + } else { + expect(btnNext.classList.contains('is-disabled')).to.be.true; + done(); + } + }; + clickNext(); + }); + }, 100); + }); it('should work with lazy', done => { vm = createVue({ template: `