gpt4 book ai didi

'useValue' 提供者的 Angular 4 静态分析失败

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:51 25 4
gpt4 key购买 nike

我收到这个错误 -

错误:错误:静态解析符号值时遇到错误。调用函数“SecurityModule”,不支持函数调用。考虑用导出函数的引用替换函数或 lambda ...

我读到函数调用不能太复杂以至于静态分析器无法处理,但您可以看到这应该是直截了当的。我不确定为什么会失败。
我看过几个使用长格式提供者对象的示例,据我所知,这应该是可以接受的。

这是项目-
https://github.com/savantly-net/ngx-security

有什么想法吗?

安全模块 -

import { ISecurityService } from './ISecurity.service';
import { NgModule, ModuleWithProviders, Optional, SkipSelf, InjectionToken } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserComponent } from './user/user.component';

export const SECURITY_SERVICE = new InjectionToken<ISecurityService>('security.service');

@NgModule({
imports: [
CommonModule
],
exports: [ UserComponent ],
declarations: [ UserComponent ]
})
export class SecurityModule {

static forRoot(securityService: ISecurityService): ModuleWithProviders {
return {
ngModule: SecurityModule,
providers: [{
provide: SECURITY_SERVICE,
useValue: securityService
}]
};
}

constructor (@Optional() @SkipSelf() parentModule: SecurityModule) {
if (parentModule) {
throw new Error(
'SecurityModule is already loaded. Import it in the AppModule only');
}
}
}

应用模块 -

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { SecurityModule, SecurityMockService } from '@savantly/ngx-security';

export const mockSecurity = new SecurityMockService();

@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
SecurityModule.forRoot(mockSecurity)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

SecurityMockService -

@Injectable()
export class SecurityMockService implements ISecurityService {
logout: () => void;
login: (username: string, password: string) => boolean;
user: IUser;

constructor() {
this.user = {
principal: 'demoUser',
displayName: 'Demo User',
authenticated: false,
roles: ['ADMIN', 'USER']
};

this.login = (_username: string, _password: string) => {
this.user.authenticated = true;
return true;
};

this.logout = () => {
this.user.authenticated = false;
};
}
}

最佳答案

好的,这是简单的解决方法:

使用 SecurityModule.forRoot(new SecurityMockService()) 而不是

export const mockSecurity = new SecurityMockService();
SecurityModule.forRoot(mockSecurity)

但是来了。你真的应该像 Graham 说的那样使用 useClass,因为这会让你的服务实例化成为 Angular 。

关于 'useValue' 提供者的 Angular 4 静态分析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com