我正在为Angular(2)应用程序创建服务,所有文档都使用类,但我更喜欢将服务编写为函数.
这是我想要的工作(但不是):
import { Injectable } from '@angular/core'; export const AframeMessengerService = Injectable()(function AframeMessengerService() { console.log('aframe messenger'); });
Cannot find name 'AframeMessengerService'.
这是什么工作,但不是我想要的:
import { Injectable } from '@angular/core'; @Injectable() export class AframeMessengerService { constructor() { console.log('aframe messenger'); } }
解决方法
基本上你在这里做的一切都是正确的:
import { Injectable } from '@angular/core'; export const AframeMessengerService = Injectable()(function AframeMessengerService() { console.log('aframe messenger'); });
现在您需要将其添加到模块提供程序:
import { AframeMessengerService } from './a.service'; @NgModule({ ... providers: [AframeMessengerService],}) export class AppModule {}
并像这样注入:
import { AframeMessengerService } from './a.service'; @Component({ selector: 'my-app',... }) export class AppComponent { constructor(@Inject(AframeMessengerService) s) { }
需要注意的一点是,当您将服务注入AframeMessengerService时,您需要传递参数索引:
import { Inject,Injectable,Injector } from '@angular/core'; const AframeMessengerService = Injectable()(function AframeMessengerService(i) { console.log('aframe messenger'); }); Inject(Injector)(AframeMessengerService,null,0); ^^^^^^^ export { AframeMessengerService };