【问题标题】:Angular 2 routing not working properlyAngular 2 路由无法正常工作
【发布时间】:2016-09-04 02:18:11
【问题描述】:

我似乎无法让路由在 Angular 2 中与子级一起使用。该应用程序是我的第一个 Angular 2 应用程序,它非常简单,顶部有一个导航栏,应该在底部填充内容页。每当我点击任何导航链接时,它们都会导航到同一个孩子,甚至更糟糕的是那个孩子堆栈的内容,这意味着我点击一次,孩子在下面加载,我再次点击它再次在下面加载,所以我有两次,以此类推。

完整的内容可以在这里找到:plunker

这是我的 searchs.routing.ts 文件:

import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { AdvancedSearchComponent } from './advanced-search/advanced-search.component';
import { GuidedSearchComponent } from './guided-search/guided-search.component';
import { QuickSearchComponent } from './quick-search/quick-search.component';

const searchesRoutes: Routes = [
    {
        children: [
            { path: 'advanced-search', component: AdvancedSearchComponent },
            { path: 'guided-search', component: GuidedSearchComponent },
            { path: 'quick-search', component: QuickSearchComponent }
        ],
        path: '',
        component: GuidedSearchComponent
    }
];

export const searchesRouting: ModuleWithProviders = RouterModule.forChild(searchesRoutes);

这是我的 app.routing.ts 文件:

import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const searchesRoutes: Routes = [
    { path: 'searches', loadChildren: 'app/searches/searches.module#SearchesModule' },
    { path: '', redirectTo: "/searches", pathMatch: 'full' }
];

const appRoutes: Routes = [
    ...searchesRoutes
];

export const appRoutingProviders: any[] = [
];

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

同样,这不能正常工作,但如果我像这样在主文件中执行所有路由:

import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { AdvancedSearchComponent } from './searches/advanced-search/advanced-search.component';
import { GuidedSearchComponent } from './searches/guided-search/guided-search.component';
import { QuickSearchComponent } from './searches/quick-search/quick-search.component';

const appRoutes: Routes = [
    { path: 'searches/advanced-search', component: AdvancedSearchComponent },
    { path: 'searches/guided-search', component: GuidedSearchComponent },
    { path: 'searches/quick-search', component: QuickSearchComponent },
    { path: '', redirectTo: "/searches/guided-search", pathMatch: 'full' }
];

export const appRoutingProviders: any[] = [
];

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);

但我想学习如何将搜索路由委托给子模块以使其更易于管理。

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    您应该在 searchesRoutes 中为您的子路由添加根组件,例如:

    @Component({
        selector: 'art-search',
        template: `<router-outlet></router-outlet>`
    })
    export class SearchComponent {}
    

    您还必须指定默认路由,例如:

    { path: '', redirectTo: '/guided-search', pathMatch: 'full' }
    

    那么您的 searches.routing.ts 文件将是:

    const searchesRoutes: Routes = [
      {
        children: [
          { path: 'advanced-search', component: AdvancedSearchComponent },
          { path: 'guided-search', component: GuidedSearchComponent },
          { path: 'quick-search', component: QuickSearchComponent },
          { path: '', redirectTo: '/guided-search', pathMatch: 'full' }
        ],
        path: '', component: SearchComponent
      } 
    ];
    

    在此处查看更多详细信息Plunker

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2014-12-05
      • 2018-01-17
      • 2017-10-15
      相关资源
      最近更新 更多