From 26af63f8e69b3c531e7fc852ab328d240fcb116b Mon Sep 17 00:00:00 2001 From: Francois Hendriks Date: Fri, 17 May 2019 15:12:09 +0200 Subject: [PATCH] fix(AbstractHistory): Fix router.back in abstract mode Fix abstract mode's router.back() when 2 consecutive same routes appear in the history stack array fix #2607 --- src/history/abstract.js | 4 ++++ src/history/base.js | 2 +- test/unit/specs/node.spec.js | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/history/abstract.js b/src/history/abstract.js index 00e09392d..95233c918 100644 --- a/src/history/abstract.js +++ b/src/history/abstract.js @@ -37,6 +37,10 @@ export class AbstractHistory extends History { this.confirmTransition(route, () => { this.index = targetIndex this.updateRoute(route) + }, (err) => { + if (err === 'SAME_ROUTE') { + this.index = targetIndex + } }) } diff --git a/src/history/base.js b/src/history/base.js index fbdf25696..09c5b1b95 100644 --- a/src/history/base.js +++ b/src/history/base.js @@ -103,7 +103,7 @@ export class History { route.matched.length === current.matched.length ) { this.ensureURL() - return abort() + return abort('SAME_ROUTE') } const { diff --git a/test/unit/specs/node.spec.js b/test/unit/specs/node.spec.js index d155982d3..1c11c5ba0 100644 --- a/test/unit/specs/node.spec.js +++ b/test/unit/specs/node.spec.js @@ -35,4 +35,21 @@ describe('Usage in Node', () => { expect(router.getMatchedComponents('/')).toEqual([Foo]) expect(router.getMatchedComponents('/bar/baz')).toEqual([Bar, Baz]) }) + + it('should navigate through history with same consecutive routes in history stack', () => { + const router = new VueRouter({ + routes: [ + { path: '/', component: { name: 'foo' }}, + { path: '/bar', component: { name: 'bar' }} + ] + }) + router.push('/') + router.push('/bar') + router.push('/') + router.replace('/bar') + router.back() + expect(router.history.current.path).toBe('/bar') + router.back() + expect(router.history.current.path).toBe('/') + }) })