Ich nehme an, vuex-router-sync wird hier nicht helfen, wie Sie die Router-Instanz benötigen.
Deshalb, obwohl dies nicht ideal fühlt man die Instanz als globale innerhalb webpack einstellen könnte, das heißt
global.router = new VueRouter({
routes
})
const app = new Vue({
router
...
jetzt sollten Sie in der Lage: router.push({ name: 'home', params: { id: 1234 }})
von überall in Ihrer App
Als eine Alternative, wenn Sie die Idee des oben genannten nicht mögen, könnten Sie ein Versprechen von Ihrer Aktion zurückgeben. Dann, wenn die Aktion erfolgreich abgeschlossen wird, nehme ich an, es ruft eine Mutation oder etwas und Sie können die Promise resolve
. Wenn es jedoch fehlschlägt und die Bedingung, die die Weiterleitung braucht, ist Sie reject
die Promise.
Auf diese Weise können die Router umzuleiten in eine Komponente bewegen kann, die einfach die abgelehnte Versprechen fängt und feuert die vue-Router schieben, dh
# vuex
actions: {
foo: ({ commit }, payload) =>
new Promise((resolve, reject) => {
if (payload.title) {
commit('updateTitle', payload.title)
resolve()
} else {
reject()
}
})
# component
methods: {
updateFoo() {
this.$store.dispatch('foo', {})
.then(response => { // success })
.catch(response => {
// fail
this.$router.push({ name: 'home', params: { id: 1234 }})
})
Duplikat von http://stackoverflow.com/questions/40736799/how-to-navigate-route-from-vuex-actions – Saurabh