123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* @flow */
- import type Router from '../index'
- import { History } from './base'
- import { NavigationFailureType, isNavigationFailure } from '../util/errors'
- export class AbstractHistory extends History {
- index: number
- stack: Array<Route>
- constructor (router: Router, base: ?string) {
- super(router, base)
- this.stack = []
- this.index = -1
- }
- push (location: RawLocation, onComplete?: Function, onAbort?: Function) {
- this.transitionTo(
- location,
- route => {
- this.stack = this.stack.slice(0, this.index + 1).concat(route)
- this.index++
- onComplete && onComplete(route)
- },
- onAbort
- )
- }
- replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {
- this.transitionTo(
- location,
- route => {
- this.stack = this.stack.slice(0, this.index).concat(route)
- onComplete && onComplete(route)
- },
- onAbort
- )
- }
- go (n: number) {
- const targetIndex = this.index + n
- if (targetIndex < 0 || targetIndex >= this.stack.length) {
- return
- }
- const route = this.stack[targetIndex]
- this.confirmTransition(
- route,
- () => {
- const prev = this.current
- this.index = targetIndex
- this.updateRoute(route)
- this.router.afterHooks.forEach(hook => {
- hook && hook(route, prev)
- })
- },
- err => {
- if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
- this.index = targetIndex
- }
- }
- )
- }
- getCurrentLocation () {
- const current = this.stack[this.stack.length - 1]
- return current ? current.fullPath : '/'
- }
- ensureURL () {
- // noop
- }
- }
|