【问题标题】:How to import an angular2 project inside another angular2 project without overwriting the routes of the second project?如何在另一个 angular2 项目中导入 angular2 项目而不覆盖第二个项目的路线?
【发布时间】:2017-08-01 02:12:20
【问题描述】:

我在另一个 angular2 项目“project2”中导入 angular2 项目“project1”时遇到了一些麻烦。我希望在 project2 运行时将其重定向到在我的 AppRoutingViewsModule 中指定的 Login2Component,但实际上正在重定向到在第一个项目内的路由中指定的 LoginComponent。这是我的路由文件以及我将第一个项目导入第二个项目的 app.module。

AppRoutingModule 项目1

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
import { AppAuthGuard } from "./security/app-auth-guard.component";
import { NoAuthComponent } from '../app/layouts/no-auth/no-auth.component';
import { NotFoundComponent } from '../app/layouts/not-found/notfound.component';
import { LoginComponent } from './login.component';
import { HomeComponent } from './home.component';
import { SsvmnComponent } from './ssvmn.component';

const routes: Routes = [
    { path: '', redirectTo: 'login', pathMatch: 'full' },
    { path: 'login', component: LoginComponent }, 
    { path: 'home', component: HomeComponent,canActivate: [AppAuthGuard],
     children: [
        { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
        { path: 'dashboard', component: DashboardComponent },
        { path: 'ssvmn/:comp', component: SsvmnComponent }
     ]
    },
    { path: 'no-auth', component: NoAuthComponent },
    { path: '**', component: NotFoundComponent }
];
@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

AppRoutingViewsModule 项目2

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Login2Component } from './login.component';

const routes: Routes = [
    { path: '', redirectTo: 'login2', pathMatch: 'full' },
    { path: 'login2', component: Login2Component }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingViewsModule { }

应用模块项目2

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponentsModule } from 'sigma-web';
import { AppRoutingViewsModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { Login2Component } from './login.component';

@NgModule({
declarations: [
    AppComponent,
    Login2Component
],
imports: [
    BrowserModule,
    AppComponentsModule,
    AppRoutingViewsModule
],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

如果您需要更多信息,请告诉我。 谢谢。

解决方案:

它不会覆盖它。它合并路由,然后选择与路由匹配的第一条路径。所以它基本上忽略了任何看起来重复的路径。如果您在合并的路径集中有通配符路径,则通配符路径之后的所有路径都将被忽略,因为路由器将选择通配符路径 致谢:DeborahK

【问题讨论】:

    标签: angular typescript angular2-routing


    【解决方案1】:

    这段代码:

    declarations: [
        AppComponent,
        LoginComponent
    ],
    

    合并来自两个组件的路由。所以你有:

    { path: '', redirectTo: 'login', pathMatch: 'full' },
    { path: 'login', component: LoginComponent }
    { path: '', redirectTo: 'login2', pathMatch: 'full' },
    { path: 'login2', component: Login2Component }
    

    由于路由顺序很重要,并且路由器始终与第一个匹配项一起使用,因此空(默认)路由将始终转到登录路径。

    如果您能提供更多信息,说明您究竟想要完成什么,我们或许可以提供更多关于如何实现它的信息。

    根据您要执行的操作,“父”路由可能有助于区分两组路由。

    【讨论】:

    • 您好,我在路由文件中添加了更多信息,基本上我想要做的是使用我的第二个项目的空路由但我无法做到,我尝试删除空的我的第一个项目的路线,但是当我这样做时,应用程序会将我重定向到此路线:{ path: '**', component: NotFoundComponent }。似乎第一条路线正在覆盖第二条路线。
    • 它没有覆盖它。它合并 路由,然后选择与该路由匹配的第一条路径。所以它基本上忽略了任何看起来重复的路径。如果您在合并的路径集中有通配符路径,则通配符路径之后的所有路径都将被忽略,因为路由器将选择通配符路径。
    • 很高兴有帮助。如果您可以将此标记为您的答案,那将关闭此问题。谢谢!
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多