vuex跟vue router和vue resource结合,怎么实现data钩子函数异步 resolve?

发布于 2022-09-03 01:11:58 字数 1255 浏览 10 评论 0

我有一个vue项目是vuexvue routervue resource结合的,然后我有一个列表是从服务器异步获取数据再显示的,我在vue组件的routedata钩子函数中要调用一个vuexaction获取数据,action是用vue resource写的

代码如下:
home.vue

<div v-if="$loadingRouteData">loading...</div>
<div v-else>
    <list v-for="item in list">list...</list
</div>
vuex: {
    getters: {
        list: listGetters
    },
    actions: {
        getList
    }
},

route: {
    data () {
        this.getList();
    }
},

actions.js

export const getList= ({dispatch}) => {
    api.getList().then(response => {
        if (!response.ok) {
            return dispatch('GET_LIST_FAILURE');
        } else {
            dispatch('GET_LIST_SUCCESS', { list: response.list });
        }
    }, response => {
        dispatch('GET_LIST_FAILURE');
    })
}

我看vue router的文档说要在data钩子函数里面返回一个promise,但我的getList是包含一个vue resource的promise的,但是我在data钩子函数里如上面代码直接调用的话是同步resolve的,怎么实现在数据获取之后变为resolve?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

池木 2022-09-10 01:11:58

因为api.getList()函数是调用vue resource然后返回一个promise,所以在函数前面都加上return返回promise即可。

home.vue

route: {
    data () {
        return this.getList();
    }
},

action.js

export const getList= ({dispatch}) => {
    return api.getList().then(response => {
        if (!response.ok) {
            return dispatch('GET_LIST_FAILURE');
        } else {
            dispatch('GET_LIST_SUCCESS', response.list);
        }
    }, response => {
        dispatch('GET_LIST_FAILURE');
    })
}

api.js

getList: function (page = 1) {
    return Vue.http.get('list', {page}); // 这里返回的 get() 函数是一个promise,所以在上面两个文件中继续 return 这个 promise 即可
},
萌面超妹 2022-09-10 01:11:58

看上去,你的data并没有按照官网的说明写哦:

图片描述

  1. 你的data里没有return

  2. 你的getList也没有返回promise

至于其它什么“但是我在data钩子函数里如上面代码直接调用的话是同步resolve的”,没看懂什么意思

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文