04-vuex中actions处理异步行为

vuex中的actions 处理异步数据请求,然后通过mutations设置state中的变量值,返回到每个组件中并展示出来。

1-改造03例子中的vuex,代码如下:

import Vue from 'vue'
import Vuex from 'vuex'

import axios from 'axios'


Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        curIdx: 0,
        name: '李一就',
        age: 35,
        data: []
    },
    mutations: {
        setIdx(state, index) {
            state.curIdx = index;
        },
        setData(state, data) {
            state.data = data;
        }
    },
    getters: {
        getMyInfo(state) {
            return "我的名字叫" + state.name + " , 今年有" + state.age + "岁了。"
        }

    },
    actions: {
        getData(ctx, payLoad) {
            return new Promise(async(resolve, reject) => {
                const res = await axios.post('http://127.0.0.1:9200/layerinfo/_search', payLoad);
                ctx.commit('setData', res.data);
                resolve();

            })

        }
    },
    modules: {}
})

2-新建展示数据的组件part,代码如下:

<template>

  <div>       
    <table>
      <thead>
        <td>名称</td>
        <td>类型名称</td>
        <td>数据集</td>
      </thead>
    <tbody>
      <tr v-for="(row,index)  in data" :key= "index">
       <td>{{row.name}}</td>
       <td>{{row.dataclass}}</td>
       <td>{{row.datasetcn}}</td>
     </tr>

    </tbody>
     
    </table>
  </div>
</template>

<script>
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
export default {
  components: {
  },
  // 定义属性
  data() {
    return {
      data:[]
    }
  },
  created () {
    var that = this;
     const payload ={
        "from":0,
        "size":492,
        "_source":["dataclass","datasetcn","name"]
        };
      this.$store.dispatch('getData', payload).then(function(res){
        const mdata = that.$store.state.data.hits.hits;
        for (let index = 0; index < mdata.length; index++) {
          const element = mdata[index]['_source'];
          that.data.push(element);

          
        }
        
        
      })
   
  },
  methods: {
    
  },

  // 生命周期 - 挂载完成(可以访问DOM元素)
  mounted() {
     
     
      
     
    
  }
}
</script>

<style scoped>
  table{
    border: 1px solid #cccccc
  }
  thead {
    font-size: 16px;
    font-weight: bold;
  }
  table td{
    border-right: 1px solid #cccccc;
    border-bottom: 1px solid #cccccc;
    text-align: left;
    width: 200px;
    height: 40px;
  }
</style>

3-效果如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limeng19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值