如何将Angular @Injectable与函数(不是类)一起使用

前端之家收集整理的这篇文章主要介绍了如何将Angular @Injectable与函数(不是类)一起使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为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 };

猜你在找的Angularjs相关文章