Дочерний модуль angular 5 не видит поставщиков

Я создал дочерний модуль для своего приложения с дочерними маршрутами, но всякий раз, когда я добавляю преобразователь в свой дочерний маршрут, он жалуется на то, что мой преобразователь не предоставляется, но он предоставляется.

Мой подмодуль

export const routes: Routes = [
    {
        path: '',
        component: SubTypesComponent,
        resolve: {
            contact: 'contact'
        }
    }
];

@NgModule({
    imports: [
        CommonModule,
        AppRoutingModule,
    ],
    declarations: [SubTypesComponent],
    providers: [
        SubTypeService,
        {
            provide: 'contact',
            useValue: () => {
                return {
                    id: 1,
                    name: 'Some Contact',
                    website: 'http://some.website.com'
                };
            }
        }
    ]
})
export class TermModule {
}

Ошибка при переходе к маршруту

Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[contact]: 
StaticInjectorError(Platform: core)[contact]: 
NullInjectorError: No provider for contact! 
_NullInjector.prototype.get@webpack-internal:///../../../core/esm5/core.js:1208:19 resolveToken@webpack-internal:///../../../core/esm5/core.js:1506:17 tryResolveToken@webpack-internal:///../../../core/esm5/core.js:1448:16 StaticInjector.prototype.get@webpack-internal:///../../../core/esm5/core.js:1316:20 resolveToken@webpack-internal:///../../../core/esm5/core.js:1506:17 tryResolveToken@webpack-internal:///../../../core/esm5/core.js:1448:16 StaticInjector.prototype.get@webpack-internal:///../../../core/esm5/core.js:1316:20 resolveNgModuleDep@webpack-internal:///../../../core/esm5/core.js:11061:12 NgModuleRef_.prototype.get@webpack-internal:///../../../core/esm5/core.js:12294:16 PreActivation.prototype.getToken@webpack-internal:///../../../router/esm5/router.js:4057:16 PreActivation.prototype.getResolver@webpack-internal:///../../../router/esm5/router.js:4040:41 PreActivation.prototype.resolveNode@webpack-internal:///../../../router/esm5/router.js:4015:88 PreActivation.prototype.runResolve@webpack-internal:///../../../router/esm5/router.js:3991:84 PreActivation.prototype.resolveData/runningChecks$<@webpack-internal:///../../../router/esm5/router.js:3630:162 MergeMapSubscriber.prototype._tryNext@webpack-internal:///../../../../rxjs/_esm5/operators/mergeMap.js:133:22 MergeMapSubscriber.prototype._next@webpack-internal:///../../../../rxjs/_esm5/operators/mergeMap.js:123:13 MergeMapSubscriber.prototype.notifyComplete@webpack-internal:///../../../../rxjs/_esm5/operators/mergeMap.js:175:13 InnerSubscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/InnerSubscriber.js:34:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 Subscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:140:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 Subscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:140:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 Subscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:140:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 Subscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:140:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 Subscriber.prototype._complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:140:9 Subscriber.prototype.complete@webpack-internal:///../../../../rxjs/_esm5/Subscriber.js:122:13 onLoad@webpack-internal:///../../../http/esm5/http.js:1630:21 ZoneDelegate.prototype.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:421:17 onInvokeTask@webpack-internal:///../../../core/esm5/core.js:4938:24 ZoneDelegate.prototype.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:420:17 Zone.prototype.runTask@webpack-internal:///../../../../zone.js/dist/zone.js:188:28 ZoneTask.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:496:24 invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:1517:9 globalZoneAwareCallback@webpack-internal:///../../../../zone.js/dist/zone.js:1543:17 Stack trace: resolvePromise@webpack-internal:///../../../../zone.js/dist/zone.js:809:31 resolvePromise@webpack-internal:///../../../../zone.js/dist/zone.js:775:17 scheduleResolveOrReject/<@webpack-internal:///../../../../zone.js/dist/zone.js:858:17 ZoneDelegate.prototype.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:421:17 onInvokeTask@webpack-internal:///../../../core/esm5/core.js:4938:24 ZoneDelegate.prototype.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:420:17 Zone.prototype.runTask@webpack-internal:///../../../../zone.js/dist/zone.js:188:28 drainMicroTaskQueue@webpack-internal:///../../../../zone.js/dist/zone.js:595:25 ZoneTask.invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:500:21 invokeTask@webpack-internal:///../../../../zone.js/dist/zone.js:1517:9 globalZoneAwareCallback@webpack-internal:///../../../../zone.js/dist/zone.js:1543:17

Дочерний маршрут также импортируется в мою маршрутизацию основных модулей, это работает, потому что, когда я удаляю этот преобразователь из своего дочернего маршрута, я могу без проблем перейти к маршруту.

Я делал это много раз без каких-либо проблем, поэтому я как бы потерялся здесь.

Моя родительская маршрутизация

import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {Routes} from '@angular/router';
import {routes as subTypeRoutes} from '../term/term.module';

export const routes: Routes = [
    {
        path: 'subtypes',
        resolve: {
            project: ProjectResolve
        },
        children: subTypeRoutes
    },
];

@NgModule({
    imports: [
        CommonModule
    ],
    declarations: []
})
export class ProjectRoutingModule {
}

Мой родительский модуль

@NgModule({
    imports: [
        CommonModule,
        AppRoutingModule,
    ],
    declarations: [
        ProjectsComponent,
    ],
    providers: [
        ProjectService,
        ProjectsResolve,
        ProjectResolve
    ]
})
export class ProjectModule {
}

person Glenn Van Schil    schedule 14.02.2018    source источник
comment
Не могли бы вы предоставить источник AppModule и AppRoutingModule, пожалуйста?   -  person JeanPaul A.    schedule 14.02.2018
comment
@JeanPaulA. Я добавил родительский модуль и его маршрутизацию, это отдельные файлы. Я также удалил все остальное, потому что у меня есть похожие дочерние модули, которые работают точно так же и следуют той же структуре настройки, но они работают, хотя   -  person Glenn Van Schil    schedule 14.02.2018
comment
Вам обязательно нужно экспортировать свой преобразователь, чтобы его можно было использовать в AppRoutingModule.   -  person Pierre Mallet    schedule 14.02.2018
comment
@PierreMallet Но я никогда не экспортировал резолвер из других моих маршрутов, но они действительно работают ...   -  person Glenn Van Schil    schedule 14.02.2018
comment
да, но было ли определение маршрута и использование маршрута в разных модулях? Ваш контактный преобразователь зарегистрирован в TermModule, и вы используете свой маршрут в ProjectRoutingModule, у которого нет никакой ссылки на предоставленный вами контактный injectable. Я не понимаю, как это могло сработать.   -  person Pierre Mallet    schedule 14.02.2018
comment
@PierreMallet Ты поставил меня на правильный путь, думаю, я нашел его. Еще несколько тестов, но я отправлю ответ со ссылкой на ваш комментарий после того, как проверил   -  person Glenn Van Schil    schedule 14.02.2018
comment
@PierreMallet опубликовал ответ, еще раз спасибо   -  person Glenn Van Schil    schedule 14.02.2018


Ответы (1)


Благодаря комментарию @PierreMallet я его нашел. Мне пришлось импортировать TermModule в свой ParentModule. Это кажется вполне нормальным, но я упустил это из виду, потому что в последнее время я разрабатывал lotGrandChildModules, и мне не приходилось напрямую импортировать его в свой ParentModule, потому что он был импортирован через ChildModule, поэтому я забыл об этой части.

ParentModule> ChildModule> GrandChildModule

Сложная настройка структуры проекта заставила меня упустить это из виду.

person Glenn Van Schil    schedule 14.02.2018