繁体   English   中英

将类导入Vue组件

[英]Class import into Vue component

我想为axios请求创建单独的类,其工作方式类似于“服务”

Vue组件:

<template>
    <div v-for="user in users">
        {{ user.firstname }} - {{ user.lastname }} - {{ user.middlename }}
    </div>
</template>

<script>
    import ConnectionService from './ConnectionService';
    const connectionService = new ConnectionService();

    export default {
        mounted() {
            console.log('Component is mounted');
        },

        created() {
            this.users = connectionService.getSingleInstance('http://laravelapi/user');
            console.log("This are users " + this.users);
        },

        data() {
            return {
                users: [],
            }
        }
    }
</script>

服务如下:

export default class ConnectionService {

    getSingleInstance(path) {
        console.log('This is path ' + path);

        let axios_data = {};
        axios.get(path).then(response => axios_data = response.data.result);

        console.log('This is data ' + axios_data);
        console.log(axios_data);

        return axios_data;
    }


}

正如我在控制台中看到的那样,我是从axios xhr请求中获取数据的,但是这些数据没有传递给Vue组件,因为我在字符串console.log(“ This are users” + this.users)中得到了空对象。 ;

如何正确导入COnnectionService,然后在Vue Component中使用它?

修改vue组件中的下一个:

created() {
    connectionService.getSingleInstance('http://laravelapi/user')
        .then(function(response){
            this.users = response
            console.log("This are users " + this.users);
        })
        .catch(function(error){
            console.log(error)
        });
}

就像getSingleInstance返回一个对象一样,我建议这样声明用户: user: Objectuser: {}而不是user: []

似乎您必须使用Promise,因为.get是一个异步函数。 要安装Q promises软件包,请参阅: Q

在您的示例中如何使用:

import Q from 'q'

export default class ConnectionService {
    getSingleInstance(path) {
        var deferred = Q.defer()
        console.log('This is path ' + path);

        axios.get(path)
            .then(
                 function(response) {
                     deferred.resolve(response.data.result)
                 },
                 function(error){
                     deferred.reject(error)
                 })
        return deferred.promise
    }
}

如您所见,我更改了箭头语法( => ),因为我对此进行了更清晰的说明。

我无法测试它,而且我不是专家(我只是想提供帮助),但我认为它应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM