为什么我必须添加尾巴'提供商'到服务名称,当我使用es6

时间:2015-12-28 04:02:10

标签: javascript angularjs

我的角度版本是1.4.8。

我有一个用es-6类定义的服务

class OrdersService {
    ...
}

export default angular.module('services.orders', [])
    .service('ordersService', OrdersService)
    .name;

我想将它注入其他模块

import ordersService from 'orders.service'

function routes($stateProvider, ordersService) {
       ....
}

routes.$inject = ['$stateProvider', 'ordersService'];

export default angular
    .module('orders',[ordersService])
    .config(routes)

但是Angular抛出了一个例外,说“无法找到提供商订单服务'”。但添加尾巴'提供商'服务使它发挥作用。

routes.$inject = ['$stateProvider', 'ordersServiceProvider'];

在这篇文章中,作者不会添加但仍然有用。 http://angular-tips.com/blog/2015/06/using-angular-1-dot-x-with-es6-and-webpack/

class RandomNames {
  ....
}

export default angular.module('services.random-names', [])
  .service('randomNames', RandomNames)
  .name;




import randomNames from 'randomNames'

export default class HomeController {
  ....
}

HomeController.$inject = ['randomNames'];

为什么我需要添加'提供商'服务?是否有api doc来声明这个?

2 个答案:

答案 0 :(得分:4)

在角度config阶段,您只能使用提供者。使用.service(或.factory)是创建提供者的简写。您也可以使用.provder,但是您必须更明确地创建提供程序。

提供商和.config阶段用于配置在应用中使用的服务。由于您没有进行任何配置,因此将orderService注入.config无效。

也许你可以把它注入.run

答案 1 :(得分:0)

您可以使用ngAnotate而不是手动执行此操作。

在构造函数中添加特殊注释:

export default class HomeController {
   /*@ngInject*/
   constructor(randomNames) {
     this.randomNames = randomNames;
   }
}

然后在构建过程中添加ng-annotate插件,它将为您描述注射。