Angular 4 使用命名路由器插座的延迟加载不起作用
Angular 4 Lazy loading with named router-outlet not working
我对延迟加载有疑问,不会路由到指定的路由器插座。有人可以看看我哪里错了吗?我有一个主页,其中有一个 link 到 Product -> default router outlet 和 Product Detail -> named router outlet。
<div>
<div><a [routerLink]="['product']"> Product </a> </div>
<div><a [routerLink]="['productdetail',{outlets:{productdetail: 'detail'}}]"> Product Detail </a> </div>
<div> <router-outlet></router-outlet></div>
<div> <router-outlet name="detail"></router-outlet>
</div>
下面是插件代码。
这是已知错误,您可以跟踪问题 here
The workaround or we can say solution to this issue is, use non-empty paths for your top
level routes if auxilary(i.e. named) routes exist in a lazy loaded module.
我能看到的唯一缺陷是,在路线中添加了一个额外的 url 段
MainRoutingModule:顶级非空路径(即"path: 'load'")
import { ModuleWithProviders, NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MainpageComponent } from './mainpage.component';
import { ProductComponent } from './product.component';
import { ProductDetailComponent } from './productdetail.component';
const childroutes: Routes = [
{ path: 'load', component: MainpageComponent ,
children: [
{path: 'product', component: ProductComponent
{path: 'productdetail', component: ProductDetailComponent,
outlet: 'detail'
},
]
},
];
export const routing: ModuleWithProviders = RouterModule.forChild(childroutes);
const newLocal: NgModule = {
imports: [RouterModule.forChild(childroutes) ],
exports: [RouterModule, ],
declarations: []
};
@NgModule(newLocal)
export class MainRoutingModule { }
MainpageComponent:使用辅助路由的正确语法。
[routerLink]="[{outlets:{detail:['productdetail']}}]"
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-main',
template: `
<div>
<div><a [routerLink]="['product']"> Product </a> </div>
<div><a [routerLink]="[{outlets:{detail:['productdetail']}}]"> Product Detail </a> </div>
<div> <router-outlet></router-outlet></div>
<div> <router-outlet name="detail"></router-outlet>
</div>
`,
encapsulation: ViewEncapsulation.None,
})
export class MainpageComponent {}
登录组件:
Use [routerLink]="['mainpage/load']" to load the main module.
import { Component, OnInit, OnDestroy } from '@angular/core';
@Component({
selector: 'app-login',
template: `This is login page place holder <br> <a [routerLink]="['mainpage/load']">Go to Main Page</a>`,
})
export class LoginComponent implements Oninit, OnDestroy {
constructor() {}
ngOnInit(): void {}
}
假设路由是 profile ProfileComponent 的一部分(example.com/profile)
profile.component.ts
<a routerLink="/profile/about">About</a>
<a routerLink="/profile/edit">Edit</a>
<a routerLink="/profile/settings">Settings</a>
<router-outlet></router-outlet>
共有三个不同的组件:
- 关于组件
- 编辑组件
- 设置组件
然后路线将如下所示:
{
path: 'profile',
component: ProfileComponent,
children: [
{
path: 'about',
component: AboutComponent
},
{
path: 'edit',
component: EditComponent
},
{
path: 'settings',
component: SettingsComponent
}
]
}
解决了 solution 问题,避免空路径“”。
感谢 Domenic Helfenstein, who took time to reproduce the problem here 的礼貌。
我对延迟加载有疑问,不会路由到指定的路由器插座。有人可以看看我哪里错了吗?我有一个主页,其中有一个 link 到 Product -> default router outlet 和 Product Detail -> named router outlet。
<div>
<div><a [routerLink]="['product']"> Product </a> </div>
<div><a [routerLink]="['productdetail',{outlets:{productdetail: 'detail'}}]"> Product Detail </a> </div>
<div> <router-outlet></router-outlet></div>
<div> <router-outlet name="detail"></router-outlet>
</div>
下面是插件代码。
这是已知错误,您可以跟踪问题 here
The workaround or we can say solution to this issue is, use non-empty paths for your top level routes if auxilary(i.e. named) routes exist in a lazy loaded module.
我能看到的唯一缺陷是,在路线中添加了一个额外的 url 段
MainRoutingModule:顶级非空路径(即"path: 'load'")
import { ModuleWithProviders, NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MainpageComponent } from './mainpage.component';
import { ProductComponent } from './product.component';
import { ProductDetailComponent } from './productdetail.component';
const childroutes: Routes = [
{ path: 'load', component: MainpageComponent ,
children: [
{path: 'product', component: ProductComponent
{path: 'productdetail', component: ProductDetailComponent,
outlet: 'detail'
},
]
},
];
export const routing: ModuleWithProviders = RouterModule.forChild(childroutes);
const newLocal: NgModule = {
imports: [RouterModule.forChild(childroutes) ],
exports: [RouterModule, ],
declarations: []
};
@NgModule(newLocal)
export class MainRoutingModule { }
MainpageComponent:使用辅助路由的正确语法。
[routerLink]="[{outlets:{detail:['productdetail']}}]"
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-main',
template: `
<div>
<div><a [routerLink]="['product']"> Product </a> </div>
<div><a [routerLink]="[{outlets:{detail:['productdetail']}}]"> Product Detail </a> </div>
<div> <router-outlet></router-outlet></div>
<div> <router-outlet name="detail"></router-outlet>
</div>
`,
encapsulation: ViewEncapsulation.None,
})
export class MainpageComponent {}
登录组件:
Use [routerLink]="['mainpage/load']" to load the main module.
import { Component, OnInit, OnDestroy } from '@angular/core';
@Component({
selector: 'app-login',
template: `This is login page place holder <br> <a [routerLink]="['mainpage/load']">Go to Main Page</a>`,
})
export class LoginComponent implements Oninit, OnDestroy {
constructor() {}
ngOnInit(): void {}
}
假设路由是 profile ProfileComponent 的一部分(example.com/profile)
profile.component.ts
<a routerLink="/profile/about">About</a>
<a routerLink="/profile/edit">Edit</a>
<a routerLink="/profile/settings">Settings</a>
<router-outlet></router-outlet>
共有三个不同的组件:
- 关于组件
- 编辑组件
- 设置组件
然后路线将如下所示:
{
path: 'profile',
component: ProfileComponent,
children: [
{
path: 'about',
component: AboutComponent
},
{
path: 'edit',
component: EditComponent
},
{
path: 'settings',
component: SettingsComponent
}
]
}
解决了 solution 问题,避免空路径“”。 感谢 Domenic Helfenstein, who took time to reproduce the problem here 的礼貌。