Angular 4.x-不支持函数调用。考虑引用一个导出函数替换函数或lambda
我试图通过使用静态forRoot()提供一种定制服务的方法,但是 我得到以下错误-即使我已导出menuServiceFactory函数以用作工厂。Angular 4.x-不支持函数调用。考虑引用一个导出函数替换函数或lambda,angular,typescript,angular-factory,Angular,Typescript,Angular Factory,我试图通过使用静态forRoot()提供一种定制服务的方法,但是 我得到以下错误-即使我已导出menuServiceFactory函数以用作工厂。 我还尝试将其导出为常量值 ERROR in Error: Error encountered resolving symbol values statically. Calling function 'MenuModule', function calls are not supported. Consider replacing the funct
我还尝试将其导出为常量值 ERROR in Error: Error encountered resolving symbol values statically. Calling function 'MenuModule', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol AppModule in ...
使用@yurzui help-这是重构模块-
import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MenuComponent } from './menu.component';
import { MenuService } from './menu.service';
import { MdMenuModule, MdToolbarModule, MdButtonModule } from '@angular/material';
import { FlexLayoutModule } from '@angular/flex-layout';
import { SecurityModule, SecurityService } from '@savantly/ngx-security';
@NgModule({
imports: [
CommonModule,
MdMenuModule, MdToolbarModule, MdButtonModule, FlexLayoutModule, SecurityModule
],
exports: [
CommonModule,
MdMenuModule, MdToolbarModule, MdButtonModule, FlexLayoutModule,
SecurityModule,
MenuComponent],
declarations: [MenuComponent],
providers: []
})
export class MenuModule {
static forRoot({securityService = SecurityService}: {securityService?: SecurityService} = {}): ModuleWithProviders {
return {
ngModule: MenuModule,
providers: [{
provide: MenuService,
useFactory: menuServiceFactory,
deps: [securityService]
}]
};
}
constructor (@Optional() @SkipSelf() parentModule: MenuModule) {
if (parentModule) {
throw new Error(
'MenuModule is already loaded. Import it in the AppModule only');
}
}
}
export function menuServiceFactory(_securityService: SecurityService): MenuService {
return new MenuService(_securityService);
}
使用@yurzui help-这是重构模块-
import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MenuComponent } from './menu.component';
import { MenuService } from './menu.service';
import { MdMenuModule, MdToolbarModule, MdButtonModule } from '@angular/material';
import { FlexLayoutModule } from '@angular/flex-layout';
import { SecurityModule, SecurityService } from '@savantly/ngx-security';
@NgModule({
imports: [
CommonModule,
MdMenuModule, MdToolbarModule, MdButtonModule, FlexLayoutModule, SecurityModule
],
exports: [
CommonModule,
MdMenuModule, MdToolbarModule, MdButtonModule, FlexLayoutModule,
SecurityModule,
MenuComponent],
declarations: [MenuComponent],
providers: []
})
export class MenuModule {
static forRoot({securityService = SecurityService}: {securityService?: SecurityService} = {}): ModuleWithProviders {
return {
ngModule: MenuModule,
providers: [{
provide: MenuService,
useFactory: menuServiceFactory,
deps: [securityService]
}]
};
}
constructor (@Optional() @SkipSelf() parentModule: MenuModule) {
if (parentModule) {
throw new Error(
'MenuModule is already loaded. Import it in the AppModule only');
}
}
}
export function menuServiceFactory(_securityService: SecurityService): MenuService {
return new MenuService(_securityService);
}
尝试删除
if-else
语句谢谢@yurzui-它确实消除了静态分析错误。现在我需要弄清楚如何使这个有条件的…{provide:someToken,useValue:options},{provide:MenuService,useFactory:MenuService,deps:[someToken]}
这很有效,谢谢!尝试删除if-else
语句谢谢@yurzui-它确实消除了静态分析错误。现在我需要弄清楚如何使这个有条件的…{provide:someToken,useValue:options},{provide:MenuService,useFactory:MenuService,deps:[someToken]}
这很有效,谢谢!嗨,你能给我解释一下forRoot参数吗?嗨,你能给我解释一下forRoot参数吗?