gpt4 book ai didi

将 Angular 依赖注入(inject)到导出函数中

转载 作者:行者123 更新时间:2023-12-05 05:14:20 34 4
gpt4 key购买 nike

我正在使用 apollo graphql,它有一个模块,里面有一个函数。

export function createApollo(httpLink: HttpLink, connectToDevTools: true){

在此函数中,您定义 graphql 端点的 url const uri = http://127.0.0.1/graphql 例如。

我想从服务中导入这个 url(这样我只需要在一个地方更改后端服务器 url),但我不能注入(inject)服务,因为属性保持未定义。

export function createApollo(httpLink: HttpLink, connectToDevTools: true, urlservice: UrlsService) {
const uri = urlservice.graphqlAddress;

错误:无法读取未定义的属性“graphqlAddress”

我也曾尝试将服务注入(inject)到模块构造函数中,但这在链条的下游甚至更低,结果相同。

如何在函数 createApollo 中获取外部属性?

我的服务基本上是这样的:

export class UrlsService {
...
graphqlAddress = 'http://192.168.2.24:8000/graphql/';
...
}

GraphQLModule 提供者:

@NgModule({
exports: [ApolloModule, HttpLinkModule],
providers: [
UrlsService,
{
provide: APOLLO_OPTIONS,
useFactory: createApollo,
deps: [HttpLink],
},
],
})
export class GraphQLModule {
}

最佳答案

当声明一个带参数的工厂函数时,您需要在依赖设置 deps 中声明这些参数,在 providers 配置中。 (这在 angular doc 中有解释)。所以在你的例子中,你需要添加 UrlsService

@NgModule({
exports: [ApolloModule, HttpLinkModule],
providers: [
UrlsService,
{
provide: APOLLO_OPTIONS,
useFactory: createApollo,
deps: [HttpLink, UrlsService],
},
],
})
export class GraphQLModule {
}

此外,connectDevTools 参数看起来没有正确声明

export function createApollo(httpLink: HttpLink, connectToDevTools: true, urlservice: UrlsService) 

关于将 Angular 依赖注入(inject)到导出函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52659398/

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