使用ES6类和$ resource创建服务

时间:2018-07-23 13:56:40

标签: javascript angularjs ecmascript-6

我想创建一个服务,该服务可以注入到使用名为Contact的实体的不同控制器中。

我有一个.js文件,其中已配置了所有内容,并按如下所示将服务导入其中:

import ContactService from './service/ContactService';
import ContactsController from './ContactsController';
//...
angular.module(name,[
   //...
   ]).service('contactService', ContactService)
     .controller('contactsController', ContactsController)
//...

在ContactsController.js中,我想使用这样的服务:

export default ($scope, contactService) => {
   $scope.contacts = contactService.get();
}

然后在我的ContactService.js中,我尝试执行此操作,但是它不起作用

var Contact;
class ContactService {

    constructor($resource) {
        Contact = $resource('/contacts/:id');
    }

    get(id) {
        return Contact.get(id);
    }

    get() {
        return Contact.query();
    }

    //...
}
ContactService.$inject = ['$resource'];
export default ContactService;

我怎样才能很好地实现ContactService.js,以便它使用ES6类和$resource来工作?

1 个答案:

答案 0 :(得分:1)

构造函数需要使用this对象:

̶v̶a̶r̶ ̶C̶o̶n̶t̶a̶c̶t̶;̶
class ContactService {

    constructor($resource) {
        ̶C̶o̶n̶t̶a̶c̶t̶ ̶=̶ ̶$̶r̶e̶s̶o̶u̶r̶c̶e̶(̶'̶/̶c̶o̶n̶t̶a̶c̶t̶s̶/̶:̶i̶d̶'̶)̶;̶ 
        this.Contact = $resource('/contacts/:id');
    }

    get(id) {
        return this.Contact.get(id);
    }

    getAll() {
        return this.Contact.query();
    }

    //...
}
ContactService.$inject = ['$resource'];
export default ContactService;

此外,由于代码使用类,请避免在控制器中使用$ scope:

class ContactsController {
    constructor (contactService) {}
        this.contactService = contactService;
    }
    $ngInit () {
        this.contacts = this.contactService.get();
    }
}

ContactsController.$inject = ['contactService'];
export default ContactsController;