![](/img/trans.png)
[英]How to lazy load nested routes for auxiliary router-outlet in Angular
[英]angular directly load a lazy module with nested router-outlet
我有一個帶有幾個延遲加載模塊的Angular CLI應用程序,其中一些包含自己的路由器出口。 從應用程序的根目錄導航時,我可以輕松訪問所有路由。 但是,如果我嘗試直接路由到延遲加載模塊中的路由,則瀏覽器似乎嘗試從不存在的文件夾加載應用程序。
例如,根路由模塊的路由如下所示:
{
path: 'A', loadChildren:
'./A/A.module#AModule',
canActivate: [LoadGuardService]
}
AModule然后有這個路線:
export const AModRoutes: Routes = [
{
path: '', component: AHomeComponent, children: [
{ path: 'building', pathMatch: 'full', component: BuildingComponent },
{ path: 'sitewide', pathMatch: 'full', component: SitewideComponent },
{ path: 'spaces', pathMatch: 'full', loadChildren: '../spaces/spaces.module#SpacesModule' }
]
}
];
如果我從頭開始加載應用程序(在端口4200上運行),我可以點擊並導航到127.0.0.1:4200/A/building
,但是我無法直接導航到同一個URL。
控制台給出了一堆這樣的錯誤:
GET http://127.0.0.1:4200/es/inline.bundle.js net::ERR_ABORTED building:20 . . . GET http://127.0.0.1:4200/es/main.bundle.js 404 (Not Found) build:20
我想知道這是否與錯誤設置基本href或其他東西有關。 我最近切換到CLI並且必須向根模塊提供程序添加{ provide: APP_BASE_HREF, useValue: '/' }
以使其正常工作。
我在撰寫這個問題時發現了更多的東西:一旦我導航到A/building
,我可以在A/sitewide
sitewide,但不能到B/
或A/spaces
。 在切換到CLI之前,這不是問題
編輯:添加根路由器模塊(至少大部分)
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { LoadGuardService } from "./services/load-guard.service";
export const APPROUTES: Routes =
[
{
path: 'A', loadChildren:
'./A/A.module#AModule',
canActivate: [LoadGuardService]
},
{
path: 'B', loadChildren:
'./B/B.module#BModule',
canActivate: [LoadGuardService],
data: { byPhone: false }
},
...
];
@NgModule({
imports: [RouterModule.forRoot(APPROUTES)],
exports: [RouterModule],
providers: [LoadGuardService]
})
export class AppRoutingModule { }
需要說明的是,Routes數組中的省略號不在實際代碼中。 只是為了縮短片段
我不記得在什么時候我必須向{ provide: APP_BASE_HREF, useValue: '/' }
添加{ provide: APP_BASE_HREF, useValue: '/' }
,但是當我這樣做時,我在index.html中注釋掉了<base href="/">
(當時,這似乎工作)。 我取消注釋這條線,現在一切正常。 有人可以解釋APP_BASE_HREF的作用嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.