我为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');
}
}
答案 0 :(得分:1)
基本上你在这里做的一切都是正确的:
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 };