在 angular AoT 编译器中导出变量
Exporting variable in angular AoT compiler
我尝试实现动态配置,如 post 所示。
在 JiT 编译器中一切正常,但我得到
ERROR in Error during template compile of 'environment'
Function calls are not supported in decorators but 'Environment' was called.
尝试使用 AoT 编译器构建时。
这是我的environment.ts
(注意class环境导出):
export class Environment extends DynamicEnvironment {
public production: boolean;
constructor() {
super();
this.production = false;
}
}
export const environment = new Environment();
我还是想按标准方式使用环境some.component.ts
:
import { environment } from '../environments/environment';
console.log(environment.config.property);
不要。说真的,远离这两个文件(environment.ts
和 environment.prod.ts
)。这些与 "environment" 这个词的 DevOps 含义无关,它们与调试常量有关。
如果您需要知道自己是否是 运行 调试版本,请导入 isDevMode:
import { isDevMode } from '@angular/core';
如果您需要动态配置,只需从某处读取 Json 或让服务器端将其作为脚本标记注入,然后直接读取或通过依赖注入(这并不难做到)。
但是不要弄乱这些文件。相信我,您稍后会感谢我的;)
通过创建 config.module.ts
和 config.service.ts
解决了这个问题。配置模块声明提供者:
@NgModule({
providers: [
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: ConfigService) => () => appConfigService.loadAppConfig(),
deps: [ConfigService],
multi: true,
},
],
})
export class ConfigModule {}
some.component.ts
中配置服务的使用:
@Component(...)
export class SomeComponent {
constructor(private configService: ConfigService) { }
private myMethod() {
console.log(this.configService.get.property);
}
}
对于测试,json 测试配置文件已导入:
import { default as appTestConfig } from '../../../../assets/app-config.test.json';
并直接在配置服务上设置:
TestBed.configureTestingModule({
...,
imports: [
ConfigModule,
...
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: ConfigService) => () => appConfigService.setConfig(appTestConfig),
deps: [ConfigService],
multi: true,
},
]
}).compileComponents();
我尝试实现动态配置,如 post 所示。
在 JiT 编译器中一切正常,但我得到
ERROR in Error during template compile of 'environment'
Function calls are not supported in decorators but 'Environment' was called.
尝试使用 AoT 编译器构建时。
这是我的environment.ts
(注意class环境导出):
export class Environment extends DynamicEnvironment {
public production: boolean;
constructor() {
super();
this.production = false;
}
}
export const environment = new Environment();
我还是想按标准方式使用环境some.component.ts
:
import { environment } from '../environments/environment';
console.log(environment.config.property);
不要。说真的,远离这两个文件(environment.ts
和 environment.prod.ts
)。这些与 "environment" 这个词的 DevOps 含义无关,它们与调试常量有关。
如果您需要知道自己是否是 运行 调试版本,请导入 isDevMode:
import { isDevMode } from '@angular/core';
如果您需要动态配置,只需从某处读取 Json 或让服务器端将其作为脚本标记注入,然后直接读取或通过依赖注入(这并不难做到)。
但是不要弄乱这些文件。相信我,您稍后会感谢我的;)
通过创建 config.module.ts
和 config.service.ts
解决了这个问题。配置模块声明提供者:
@NgModule({
providers: [
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: ConfigService) => () => appConfigService.loadAppConfig(),
deps: [ConfigService],
multi: true,
},
],
})
export class ConfigModule {}
some.component.ts
中配置服务的使用:
@Component(...)
export class SomeComponent {
constructor(private configService: ConfigService) { }
private myMethod() {
console.log(this.configService.get.property);
}
}
对于测试,json 测试配置文件已导入:
import { default as appTestConfig } from '../../../../assets/app-config.test.json';
并直接在配置服务上设置:
TestBed.configureTestingModule({
...,
imports: [
ConfigModule,
...
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: ConfigService) => () => appConfigService.setConfig(appTestConfig),
deps: [ConfigService],
multi: true,
},
]
}).compileComponents();