2016-08-27 29 views
5

Próbuję zbudować naprawdę małą aplikację Vue z interfejsem Rails API. W tej chwili pracuję z Vue, Vue-Resource i Vuex. Pobieram wszystkich użytkowników z bazy danych i teraz spróbuję zaktualizować jedną z nich. Tak więc wszystko działa dobrze (łatka użytkownika), ale po uruchomieniu akcji updateUser chcę ponownie uruchomić akcję fetchUsers, aby zaktualizować magazyn Vuex.Jak wywoływać akcję wewnątrz akcji w Vuex

Ale kiedy fetchUsers biegnie wewnątrz obietnicy updateUser pojawia się następujący błąd:

undefined:1 Uncaught (in promise) TypeError: Cannot read property 'dispatch' of undefined 

To właśnie moja vuex/actions.js szukasz:

export const fetchUsers = function ({ dispatch, state }) { 
    this.$http.get('http://localhost:3000/api/v1/users').then((response) => { 
    dispatch('SET_USERS', response.data) 
    }, (response) => { 
    dispatch('SET_USERS', []) 
    console.log(response) 
    }) 
} 

export const updateUser = function ({ dispatch, state }, user) { 
    this.$http.patch('http://localhost:3000/api/v1/users/' + user.id, {user: user}).then((response) => { 
    fetchUsers() 
    }, (response) => { 
    console.log(response) 
    }) 
} 

I teraz, gdy fetchUsers akcja jakoś traci kontekst (?), ale nie wiem, jak sobie z tym poradzić! dzięki za każdą pomoc!

Odpowiedz

9

to jak mam go do pracy :)

import Vue from 'vue' 

export const fetchUsers = ({ dispatch, state }) => { 
    Vue.http.get('http://localhost:3000/api/v1/users').then((response) => { 
    dispatch('SET_USERS', response.data) 
    }, (response) => { 
    dispatch('SET_USERS', []) 
    console.log(response) 
    }) 
} 

export const updateUser = ({ dispatch, state }, user) => { 
    Vue.http.patch('http://localhost:3000/api/v1/users/' + user.id, {user: user}).then((response) => { 
    fetchUsers({dispatch}) 
    }, (response) => { 
    dispatch('SET_USERS', []) 
    console.log(response) 
    }) 
} 
+0

mam taką samą strukturę, im uzyskiwanie fetchUsers nie jest zdefiniowana. –