2017-01-24 4 views
3

Ich benutze Vuex um eine Liste von Benutzern aus 'store.js' anzuzeigen. Diese js-Datei hat ein Array wie dieses.Push to vuex Speicherarray funktioniert nicht in VueJS

var store = new Vuex.Store({ 
    state: { 
    customers: [ 
     { id: '1', name: 'user 1',}, 
    ] 
    } 
}) 

Ich möchte

einen neuen Satz von Werten auf das gleiche Array einzufügen {id: '1', Name: 'user 1'}

Die obigen Werte werden von einer URL (Vue-Ressource) erhalten. Unten ist der Code, um die erhaltenen Daten in das Array zu übertragen. Allerdings werden die Daten nicht

Einfügen
mounted: function() { 
     this.$http.get('http://localhost/facebook-login/api/get_customers.php') 
     .then(response => { 
     return response.data; 
     }) 
     .then(data => { 
     store.state.customers.push(data) // not working!! 
     console.log(data) // prints { id: '2', name: 'User 2',} 
     store.state.customers.push({ id: '2', name: 'User 2',}) 
     }); 
    } 
+0

'get_customers .php' gibt ein Array oder einen einzelnen Benutzer zurück? – rogeriolino

+0

es funktioniert, wenn Sie so stellen? store.state.customers.push ({Daten}) – Miguel

+0

@rogeriolino Eigentlich sollte es ganze Array von Benutzern zurückgeben. Aber das Zurückbringen einzelner Benutzer ist auch genug. Ich habe beides versucht. Keine von ihnen funktioniert –

Antwort

10

Sie versuchen die vuex Zustand von der vue Komponente zu ändern, können Sie es nicht tun. Sie können nur vuex Speicher von einem mutation

ändern Sie eine Mutation wie folgt definieren:

var store = new Vuex.Store({ 
    state: { 
    customers: [ 
     { id: '1', name: 'user 1',}, 
    ] 
    }, 
    mutations: { 
    addCustomer (state, customer) { 
     // mutate state 
     state.customers.push(customer) 
    } 
    } 
}) 

Jetzt können Sie diese Mutation aus der vue Instanz begehen, wie folgt vor:

mounted: function() { 
     this.$http.get('http://localhost/facebook-login/api/get_customers.php') 
     .then(response => { 
     return response.data; 
     }) 
     .then(data => { 
     store.commit('addCustomer', { id: '2', name: 'User 2'}) 
     }); 
    } 
+0

das ist nicht wahr. Der Wert in einem Vuex-Store kann von der Vue-Komponente aus geändert werden. Ich habe das getan. Zum Beispiel: "store.state.something = 1" funktioniert –

+0

@GijoVarghese Die erste Zeile in [docs] (https://vuex.vuejs.org/en/mutations.html) sagt: "Der einzige Weg, um tatsächlich zu ändern Zustand in einem Vuex-Laden ist eine Mutation. " – Saurabh

+0

hmm Weiß nicht warum, aber es funktionierte für mich –

Verwandte Themen