vue接口刷新如何触发回调

想利用vuex 刷新父及更高层次组件接口数据(已实现):
有个问题:回调如何触发?

// vuex 伪代码
state: {
  updateData: false // 刷新状态
},
mutations: {
 update_data(state, payload) {
   state.updateData = payload;
 }
}

// 点击刷新按钮
this.$store.commit('update_data', true);
???如何获取接口成功之后的回调

// 高层组件

...mapGetters({
   updateData: 'updateData' // 刷新状态
)
// 监听调用接口
watch: {
   updateData(val) {
       if (val) {
           this.getData();
       }
    }
}

//接口数据
getData() {
  http().then(() => {
   this.$store.commit('update_data', false);
})
}
阅读 2.5k
2 个回答

子组件接受一个用户操作,父组件需要进行刷新,这不是一个事件传递的问题吗?

那跟着你的思路,子组件触发vuex=》vuex触发父组件的watch=》父组件获取数据

那为什么不能子组件触发vuex获取数据=》vuex将数据下发到父组件呢

高层组件方法包装为promise

function getData(id) {
  return new Promise((resolve, reject) => {
    //做一些事情
    if (id == 1) {
      resolve("yes");
    } else {
      reject("no");
    }
  });
}

低层组件调用

getData(1).then(res=>{
 //成功的回调
}).catch(e=>{
 //失败的回调
})

image.png


高层组件方法callback

function getData(id, callback) {
  //做一些事情
  if (id == 1) {
    callback("yes");
  } else {
    callback("no");
  }
}
//成功
getData(1, (e) => {
  console.log("e: ", e);
});
//失败
getData(2, (e) => {
  console.log("e: ", e);
});

低层组件调用

getData(1, (e) => {
  console.log("e: ", e);
});

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏