2017-07-16 1 views
1

Ich habe eine Bar-Komponente, dann erstelle ich eine Kind-Komponente (Kind-Bar) unter Bar-Komponente. Ich habe auch eine Kinderroute dafür. Aber ich Kind-Komponente kann nicht finden (404), wenn ich Kind-Route verwenden.Kind-Komponente kann nicht laden Kind Route in eckigen

app.routes.ts:

import { Routes } from '@angular/router'; 
import { HomeComponent } from './home'; 
import { AboutComponent } from './about'; 
import { BarComponent } from './bar/bar.component'; 
import { NoContentComponent } from './no-content'; 

import { DataResolver } from './app.resolver'; 

export const ROUTES: Routes = [ 
    { path: '',  component: HomeComponent }, 
    { path: 'home', component: HomeComponent }, 
    { path: 'about', component: AboutComponent }, 
    { path: 'bar', component: BarComponent}, 
    { path: 'detail', loadChildren: './+detail#DetailModule'}, 
    { path: 'barrel', loadChildren: './+barrel#BarrelModule'}, 
    { path: '**', component: NoContentComponent }, 
]; 

bar.component.ts:

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

@Component({ 
    selector: 'bar', 
    templateUrl: './bar.component.html', 
    styleUrls: ['./bar.component.css'] 
}) 
export class BarComponent implements OnInit { 

    constructor() { } 

    ngOnInit() { 
    } 

} 

bar.component.html:

<p> 
    bar works! 
</p> 
<span> 
     <a [routerLink]=" ['./child-bar'] "> 
     Child Bar 
     </a> 
    </span> 
<router-outlet></router-outlet> 

Kind-bar.component.ts :

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

@Component({ 
    selector: 'child-bar', 
    templateUrl: './child-bar.component.html', 
    styleUrls: ['./child-bar.component.css'] 
}) 
export class ChildBarComponent implements OnInit { 

    constructor() { } 

    ngOnInit() { 
    console.log('hello `ChildBar` component'); 
    } 

} 

Kind-bar.module.ts:

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

import { routes } from './child-bar.routes'; 
import { ChildBarComponent } from './child-bar.component'; 

console.log('`ChildBar` bundle loaded asynchronously'); 

@NgModule({ 
    declarations: [ 
    /** 
    * Components/Directives/ Pipes 
    */ 
    ChildBarComponent, 
    ], 
    imports: [ 
    CommonModule, 
    FormsModule, 
    RouterModule.forChild(routes), 
    ], 
}) 
export class ChildBarModule { 
    public static routes = routes; 
} 

kinder bar.routes.ts:

import { ChildBarComponent } from './child-bar.component'; 

export const routes = [ 
    { path: '', component: ChildBarComponent, pathMatch: 'full' }, 
]; 

Bitte lassen Sie mich wissen, wenn Sie mehr Datei benötigen, ich anbringen kann. Vielen Dank.

Antwort

0

Ihre Routing-Datei ist falsch, wenn etwas Kind einer Komponente ist dann Datei Routing wie diese

Bei normalen Routing ohne verzögertes Laden

export const routes: Routes = [ 
    { path: '', redirectTo: 'home', pathMatch: 'full' }, 
    { path: 'home', component: HomeComponent }, 
    { path: 'about', component: AboutComponent }, 
    { path: 'bar', component: BarComponent, 
    children: [ 
     { path: '', redirectTo: 'child-bar', pathMatch: 'full' }, 
     { path: 'child-bar', component: ChildBarComponent } 
    ] 
    } 
]; 

wenn Sie verzögertes Laden wollen sein sollte Sie können diese beiden Wege

1)

versuchen
{ path: 'bar', component: BarComponent, 
     children: [ 
      { path: '', redirectTo: 'child-bar', pathMatch: 'full' }, 
      { path: 'child-bar', loadChildren: 'childbar/childbar.module#ChildBarModule' } 
     ] 
    } 

2) Ihre komplette Bar-Komponente mit Kind Komponente in separater Modul mit dort eigenen Routing-Tabelle

export const routes: Routes = [ 
    { path: '', redirectTo: 'product-list', pathMatch: 'full' }, 
    { path: 'home', component: HomeComponent }, 
    { path: 'about', component: AboutComponent }, 
    { path: 'bar', loadChildren: 'bar/bar.module#LazyModule' } 
    } 
]; 

Kontrolle dieses plnkr zu verstehen bewegen, wie ein träges Laden funktioniert https://plnkr.co/edit/vpCqRHDAj7V6mlN1AknN?p=preview ich das hoffentlich helfen :)

+0

Wenn ich diese Zeile hinzugefügt: {Pfad: '', redirectTo: 'Kind-bar', pathMatch: 'voll'} Kind-Bar-Komponente wird ohne Klick Child-Bar-Komponente Link angezeigt, das ist nicht was ich wollen. Ich denke, nachdem wir Child-Bar-Link klicken, dann Kind-Bar-Komponente angezeigt wird besser – EntryLeveDeveloper

+0

Wenn ich diese Zeile hinzufügen: {Pfad: 'Child-bar', Komponente: ChildBarComponent} Kind-Bar-Komponente wird angezeigt, nachdem ich klicke Child-Bar-Link, aber es führte mich nicht zu einer anderen Ansicht, aber Child-Bar-Komponente zeigen am unteren Rand der Bar-Komponente, die nicht korrekt ist – EntryLeveDeveloper

+0

@CodeContributor im Normalfall öffnen wir automatisch eine Kind-Komponente. Entfernen Sie RedirectTo, wenn Sie es nicht laden möchten. Wenn Sie zu einer neuen Ansicht umleiten möchten, warum erstellen Sie sie dann als untergeordnete Komponente. Mach es zu einem separaten Komponentenboss. Überprüfen Sie HTML für Design, wo Sie es wollen und gehen Sie durch https://angular.io/guide/router für weitere Informationen wie Routing in eckigen funktioniert –

Verwandte Themen