我正在使用apollo graphql,它具有一个内部带有功能的模块。
export function createApollo(httpLink: HttpLink, connectToDevTools: true){
在此函数中,您可以定义graphql端点const uri = http://127.0.0.1/graphql
的网址。
我想将此URL从服务导入(这样,我只需要在一个地方更改后端服务器URL),但由于属性仍未定义,因此我无法注入服务。
export function createApollo(httpLink: HttpLink, connectToDevTools: true, urlservice: UrlsService) {
const uri = urlservice.graphqlAddress;
错误:Cannot read property 'graphqlAddress' of undefined
我也曾尝试将服务注入模块构造函数中,但这甚至更低,其结果相同。
如何将外部属性添加到函数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 {
}
答案 0 :(得分:0)
在声明带有参数的工厂函数时,需要在提供程序配置的依赖项设置deps
中声明这些参数。 (这在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)