如何从库中扩展angular服务,以便将同一库中定义的构造函数参数类型传递给它?
我正在尝试从以下位置扩展MultiWindowsService服务: 但是,最后一个参数在生成时会导致问题--aot: 警告:无法在C:/dev/web/multiwindowproto/src/app/my-multiwindow.service.ts:([object object]、[object object]、[object object]、[object object]、[object object]、?)中解析MyMultiwindowService的所有参数 在app.module中,我有:如何从库中扩展angular服务,以便将同一库中定义的构造函数参数类型传递给它?,angular,Angular,我正在尝试从以下位置扩展MultiWindowsService服务: 但是,最后一个参数在生成时会导致问题--aot: 警告:无法在C:/dev/web/multiwindowproto/src/app/my-multiwindow.service.ts:([object object]、[object object]、[object object]、[object object]、[object object]、?)中解析MyMultiwindowService的所有参数 在app.modul
// core etc imports omited
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { MapviewComponent } from './mapview/mapview.component';
import { ContentComponent } from './content/content.component';
import { ThreedeegraphicsComponent } from './threedeegraphics/threedeegraphics.component';
import { MultiWindowConfig, MultiWindowModule, WindowSaveStrategy, NGXMW_CONFIG } from 'ngx-multi-window';
const config: MultiWindowConfig = {windowSaveStrategy: WindowSaveStrategy.SAVE_WHEN_EMPTY};
@NgModule({
declarations: [
AppComponent,
MapviewComponent,
ContentComponent,
ThreedeegraphicsComponent
],
imports: [
BrowserModule,
FormsModule, ReactiveFormsModule,
MultiWindowModule.forRoot(config),
AppRoutingModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
那么,如何定义/提供扩展服务的配置呢?这是因为尚未创建MultiWindowConfig对象。如果是@Injectable,则需要在提供程序中设置多窗口配置。 如果没有,则可以使用factory模型()创建对象。首先为类创建工厂和提供程序:
const MyMultiwindowServiceFactory = (location: Location, storageService: StorageService, windowRef: WindowRef, router: Router, authService: AuthService) => {
const config: new MyMultiWindowConfig();
return new MyMultiwindowService(location, storageService, windowRef, router, authService, config)
}
export let MyMultiwindowServiceProvider = {
provide: MyMultiwindowService,
useFactory: MyMultiwindowServiceFactory,
deps: [Location, StorageService, WindowRef, Router, AuthService]
}
然后在您的app.module.ts中导入提供商并提供:
import {MyMultiwindowServiceProvider } from './services/my-multi-window.service.ts'
@NgModule({
.....other code
providers: [MyMultiwindowServiceProvider, ....other services],
bootstrap: [AppComponent]
})
现在,每当您引用MyMultiWindowsService时,提供商都会提供一个带有您在出厂时设置的配置的服务实例。谢谢!我明天试试这个。MultiWindowConfig是一个接口,所以我想我不能完全这样做。然而,我阅读了你的链接来了解这里发生了什么。它应该仍然有效,你可以将接口导入组件文件。让我知道进展如何。谢谢!工厂/供应商代码放在哪里?我已经阅读了示例,在angular.io中,它位于单独的文件(我猜是类)中。这不起作用。我将代码放在与MyMultiWindowsService类相同的文件中。但正如我所说的,MultiWindowConfig是一个接口,因此不能像在new中那样使用它。我还尝试创建我自己的类来实现接口,但最后一个参数的警告是相同的。再次感谢!你能编辑一下吗?这样我就可以接受答案了?也可以使用工厂->使用工厂和提供->提供。
const MyMultiwindowServiceFactory = (location: Location, storageService: StorageService, windowRef: WindowRef, router: Router, authService: AuthService) => {
const config: new MyMultiWindowConfig();
return new MyMultiwindowService(location, storageService, windowRef, router, authService, config)
}
export let MyMultiwindowServiceProvider = {
provide: MyMultiwindowService,
useFactory: MyMultiwindowServiceFactory,
deps: [Location, StorageService, WindowRef, Router, AuthService]
}
import {MyMultiwindowServiceProvider } from './services/my-multi-window.service.ts'
@NgModule({
.....other code
providers: [MyMultiwindowServiceProvider, ....other services],
bootstrap: [AppComponent]
})