代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

导出函数中的角度依赖注入

  •  1
  • Alfa Bravo  · 技术社区  · 6 年前

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

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

    在这个函数中定义graphql端点的url 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 {
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   David    6 年前

    声明接受参数的工厂函数时,需要在依赖项设置中声明这些参数 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)