Search code examples
javascriptvue.jsvuejs2vue-componentvuex

How to send data to component in vue js?


How do I send data to a component in Vue.js? I got a response from the server on the button click event, and now I want to send this response to the component and display on list using v-for.

Here is my code:

var store = new Vuex.Store({
    state: {
        Item: []
    },
    mutations: {
        getItems: function (state) {

        }

    },
    actions: {
        fetchData:function (context) {
           Vue.http.get('data.json').then(function(response){
             alert('dd')
}, function(error){
    console.log(error.statusText);
});

        }
    }
})

var httprequest = Vue.extend({
    "template": '#http_template',
    data: function () {
        return {
            items: store.state.Item
        }
    },
    methods: {
        fetchData: function () {
          store.dispatch('fetchData')
        },

    }
})

Vue.component('httprequest', httprequest);

var app = new Vue({
    el: '#App',
    data: {},


});

Solution

  • You have almost done everything correct. Only thing you are missing is after getting data, you are not assigning it to state.Item. Please check the below code:

    var store = new Vuex.Store({
        state: {
          Item: []
        },
        mutations: {
          getItems: function(state, items) {
            items.forEach(function(item) {
              state.Item.push(item)
            })
          }
        },
        actions: {
          fetchData: function(context) {
            Vue.http.get('data.json').then(function(response) {
              context.commit('getItems', response.data)
            }, function(error) {
              console.log(error.statusText);
            });
          }
        }
      })
    

    working example can be found here.