Используйте вспомогательные маршруты во вложенных дочерних компонентах

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

Я использую Angular 2.1.2 с маршрутизатором 3.1.2.

parent.module

import { NgModule }             from '@angular/core';
import { RouterModule }         from '@angular/router';
import { BrowserModule }        from '@angular/platform-browser';

import { ParentComponent }      from './parent.component';

import { ChildModule }          from '../child/child.public.module';
import { ChildComponent }       from '../child/child.public.component';

import { OtherModule }          from '../other/other.public.module'


@NgModule({
    imports: [
        ChildModule,
        OtherModule,
        RouterModule.forRoot([
            { path: '', component: ChildComponent }
        ])
    ],
    declarations: [ ParentComponent ],
    bootstrap:    [ ParentComponent ]
}) 

export class ParentModule { }

parent.component

import {Component} from '@angular/core';

    @Component({
        selector: 'my-app',
        template: '<router-outlet></router-outlet>'
    })

export class ParentComponent{ }

child.module

import { NgModule }             from '@angular/core';
import { RouterModule}          from '@angular/router';
import { CommonModule }         from '@angular/common';

import { ChildComponent }       from './child.public.component';

import { OtherComponent }       from '../other/other.public.component'

@NgModule({
    imports: [
        CommonModule,
        OtherModule,
        RouterModule.forChild([
            {path: 'other', component: OtherComponent, outlet: 'child'}
        ])
    ],
    declarations: [ ChildComponent ],
    exports:    [ ChildComponent ],
})
export class ChildModule { }

child.component

import { Component } from '@angular/core';

@Component({

    selector: 'child-view',
    template: '<router-outlet name="child"></router-outlet>',
})

export class ChildComponent{}

Поэтому, когда я пытаюсь перейти к /(child:other), я получаю типичное:

ошибка

Cannot find the outlet child to load 'OtherComponent'

2 ответа

Он не может найти выход маршрутизатора, потому что он не загружается. Попробуйте что-то вроде этого @usche:

RouterModule.forChild([ {path: '', component: ChildComponent}, {path: 'other', component: OtherComponent, outlet: 'child'} ])

таким образом, корневой маршрут дочернего элемента загрузит ChildComponent, где у него есть названный выход, и "другой" маршрут будет загружен внутри него.

Я думаю, что там немного путаницы.

Давайте посмотрим на родительский маршрут:

  • единственный доступный маршрут - это путь:"", который загрузит child.component

Для ребенка маршрут

  • это в child.module, который совсем не загружается родительским модулем.

Несколько вещей, которые я бы попробовал сначала: - добавить именованный выход в parent.component - добавить маршрут к другому компоненту в родительском маршруте

Посмотри, работает ли это. Как только вы получите это работает....

  • загрузите child.module, выполнив это в основном маршруте:

    {path: 'child', loadChildren: 'app / child.module # ChildModule'}

  • пример дочернего маршрута:

    {путь: "другое", компонент: OtherComponent, выход: "сторона"}

тогда вы можете просматривать как это:

/ Ребенок /(сторона: другое)

У меня есть рабочий пример, если вы хотите попробовать его: https://github.com/thiagospassos/Angular2-Routing

ура

Другие вопросы по тегам