gpt4 book ai didi

Angular - useFactory - 不支持错误函数调用。考虑将函数或 lambda 替换为对导出函数的引用

转载 作者:行者123 更新时间:2023-12-02 03:02:47 27 4
gpt4 key购买 nike

我使用 Angular AOT 编译器版本 4.1.3

我有一个组件库,它导出一个工厂方法,然后用于提供服务:

export function libServiceFactory(itemId: string) {
return (http: Http): LibService => {
return new LibService(http, itemId);
};
};

编译库ngc成功地。

然后导入编译好的库,我用 LibServiceFactory在网站的 AppModule 中:
providers: [
{ provide: SERVICE_TOKEN, useFactory: libServiceFactory('foo'), deps: [Http] }
],

编译网站ng build我收到以下错误:
ERROR in Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 5:10 in the
original .ts file), resolving symbol libServiceFactory in C:/Projects/MyProject/code/MyWebsite/node_modules/@mylibrary/service.factory.d.ts, res
olving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.module.ts, resolving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.mod
ule.ts, resolving symbol AppModule in C:/Projects/MyProject/code/MyWebsite/src/app/app.module.ts

错误 (position 5:10 in the original .ts file)指向工厂方法中的匿名函数: return (http: Http): LibService => {
作为附加信息,我创建和使用工厂方法的方式与 official documentation regarding injection tokens 中建议的 Angular 相同。 .

我的错误是预期的行为吗?还是我的实现有问题?

最佳答案

您不能在元数据装饰器中执行代码 (@Sth)
所以你无权执行函数 libServiceFactory('foo')。

如果你想拥有一个工厂(例如一些服务注入(inject)来获取 HttpClient 服务),
并且同时给出一些参数b(在你的情况下是'foo')。
您必须使用以下技巧:

export const MyLibConfig = new InjectionToken<MyConfig>('MyLibConfig');

export interface MyConfig {
p: number;
msg: string;
}

export function serviceFactory(myConfig: MyConfig, http: HttpClient): MyService {
const service = new MyService(http);
service.myConfig = myConfig;
return service;
}

那么你可以使用:
      providers: [
{
provide: MyService,
useFactory: serviceFactory,
deps: [MyLibConfig, HttpClient]
},
{
provide: MyLibConfig,
useValue: {p:3, msg:'foo'}
}
]

关于Angular - useFactory - 不支持错误函数调用。考虑将函数或 lambda 替换为对导出函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796586/

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