在Angular 2中注入内置JavaScript类
我试图创建一个内置在JavaScript中的类,可以在Angular 2应用程序中注入。对于我的特定用例,我尝试注入一个实例。我试着用以下4种方法使其可注射,但没有一种有效在Angular 2中注入内置JavaScript类,javascript,angular,web-audio-api,angular2-services,Javascript,Angular,Web Audio Api,Angular2 Services,我试图创建一个内置在JavaScript中的类,可以在Angular 2应用程序中注入。对于我的特定用例,我尝试注入一个实例。我试着用以下4种方法使其可注射,但没有一种有效 @NgModule({ providers: [ AudioContext //{provide: AudioContext, useClass: AudioContext} //{provide: AudioContext, useValue: new AudioCo
@NgModule({
providers: [
AudioContext
//{provide: AudioContext, useClass: AudioContext}
//{provide: AudioContext, useValue: new AudioContext()}
//{provide: AudioContext, useFactory: () => new AudioContext()}
]
})
export class AppModule {
}
我得到了错误
静态解析符号值时遇到错误。不能
解析类型AudioContext(原始.ts文件中的位置13:39)
如何使
AudioContext
的实例在我的应用程序中可注入,而无需将其包装到自定义服务中?全局窗口对象“作为提供程序注入窗口对象”中提供了音频上下文
var AudioContext=window.AudioContext | | window.webkitadiocontext
然后,您可以通过注入的窗口对象访问AudioContext。我想注入AudioContext的实例,而不是类不要注入窗口,这是一个糟糕的想法。@AluanHaddad注入窗口不是一个糟糕的想法,使用全局对象并将所有内容附加到它。欢迎你有意见分歧。Rob创建一个封装AudioContext的提供者,然后将其设置为提供者。如果可能的话,我希望避免创建封装AudioContext的自定义服务。不可能直接注入AudioContext吗?不可能,因为AudioContext不是Angular提供的Angular模块或提供程序。把它包装起来就是让它成为一个Angular模块,Angular可以理解并可以用于注入。你在使用AOT吗?是的,我在使用AOT。我认为你必须做一些非常愚蠢的事情,比如创建一个文件,比如
audioContext.ts
,其中包含export const audioContext=new audioContext()
然后将其导入到您的模块中。@AluanHaddad听起来好像可以工作。虽然如果像这样的对象没有通过Angular的DINo,那么单元测试可能会变得很棘手,但它仍然会来自DI,您可以将它放在providers数组中。AOT编译器完全是呆头呆脑的,不理解函数之类的基本概念。