Внедрение угловой зависимости в функцию экспорта - PullRequest
0 голосов
/ 05 октября 2018

Я использую apollo graphql, и у него есть модуль с функцией внутри него.

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

Внутри этой функции вы определяете URL для конечной точки 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 {
}

1 Ответ

0 голосов
/ 05 октября 2018

При объявлении заводской функции, которая принимает параметры, вам необходимо объявить эти параметры в настройке зависимости deps в конфигурации провайдера.(Это объясняется в угловом документе ).Так что в вашем примере вам нужно добавить 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) 
...