【问题标题】:Create service using ES6 class and $resource使用 ES6 类和 $resource 创建服务
【发布时间】:2018-07-23 13:56:40
【问题描述】:

我想创建一个可以注入不同控制器的服务,以使用名为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 工作?

【问题讨论】:

  • 尝试将其写为this.Contact = $resource(...); 并使用return this.Contact; 访问它
  • @AlekseySolovey 不工作......但也许我在错误的地方写了你的 sn-ps,idk

标签: javascript angularjs ecmascript-6


【解决方案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; 

【讨论】:

  • 我发现了我的问题:'/contacts/:id' 中的第一个 / - 没有它一切正常!但无论哪种方式,您的解决方案都没有错,并且是我将架构重构为类的良好起点,因此我给了您复选框:)
猜你喜欢
  • 2016-08-05
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2017-05-16
相关资源
最近更新 更多