2017-08-17 42 views
2

我正在为Angular(2+)应用程序创建服务,所有文档都使用类,但我更愿意将该服务编写为函数。如何在函数中使用Angular @Injectable(不是类)

这是我想要的工作什么的(但没有):

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

什么正试图做什么?一个类是一个函数 –

+0

@Maximus我想使用第一种语法,而不是第二种。我知道一个类是一个函数。我不想使用类语法。 –

+0

你打算注入任何东西到'AframeMessengerService'? –

回答

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 }; 
+0

它的工作原理!谢谢。角度语言服务(VSCode扩展)虽然有问题。它说“无法解析/ some /路径中的MyComponent的所有参数”... –

+0

@KevinBeal,对不起,不能帮助那里。不要使用VSCode。在WebStorm中一切正常。只是好奇心,你为什么需要这个? –

+0

我想我不需要它。我想我会在不知不觉中提供帮助的任何线索。尽管......在其他方面表现异常,无论如何,感谢您的帮助! :) –

相关问题