Skip to content
Effortlessly keep vue-router and vuex store in sync.
JavaScript TypeScript
Branch: master
Clone or download
Latest commit d57ed0b Oct 12, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
src add a build step Sep 18, 2017
test bump deps + update typing Oct 12, 2017
types bump deps + update typing Oct 12, 2017
.gitignore bump deps + update typing Oct 12, 2017
LICENSE Add License (#15) Jun 6, 2016 feat: add API for unsync(#66) Sep 1, 2017
circle.yml update readme + sepcify node version for circle Jun 2, 2017
package-lock.json bump vue Oct 13, 2017
package.json bump vue Oct 13, 2017

vuex-router-sync CircleCI

Sync vue-router's current $route as part of vuex store's state.


# the latest version works only with vue-router >= 2.0
npm install vuex-router-sync

# for usage with vue-router < 2.0:
npm install vuex-router-sync@2
import { sync } from 'vuex-router-sync'
import store from './vuex/store' // vuex store instance
import router from './router' // vue-router instance

const unsync = sync(store, router) // done. Returns an unsync callback fn

// bootstrap your app...

// During app/Vue teardown (e.g., you only use Vue.js in a portion of your app and you 
// navigate away from that portion and want to release/destroy Vue components/resources)
unsync() // Unsyncs store from router

You can optionally set a custom vuex module name:

sync(store, router, { moduleName: 'RouteModule' } )

How does it work?

  • It adds a route module into the store, which contains the state representing the current route:

    store.state.route.path   // current path (string)
    store.state.route.params // current params (object)
    store.state.route.query  // current query (object)
  • When the router navigates to a new route, the store's state is updated.

  • store.state.route is immutable, because it is derived state from the URL, which is the source of truth. You should not attempt to trigger navigations by mutating the route object. Instead, just call $router.push() or $router.go(). Note that you can do $router.push({ query: {...}}) to update the query string on the current path.



You can’t perform that action at this time.