Mat*_*art 5 url routes angular angular6
在我的 Angular 6 项目中,我有一些组件有侧边栏,有些则没有。我尝试使用辅助路由来做到这一点并且它有效,但是 URL 很难看......!
--
我做什么:
const routes: Routes = [
{
path: 'login',
component: LoginComponent
},
{
path: 'search',
component: SearchComponent
},
{
path: 'sidebar',
outlet: 'sidebar',
component: SidebarComponent
}
Run Code Online (Sandbox Code Playgroud)
这给了我可能的网址
https://localhost:4200/login - (login without sidebar)
https://localhost:4200/login(sidebar:sidebar) - (login with sidebar)
https://localhost:4200/search - (search without sidebar)
https://localhost:4200/search(sidebar:sidebar) - (search with sidebar)
Run Code Online (Sandbox Code Playgroud)
--
期望的结果只是有 URL 的 /login 和 /search,但是带有侧边栏的搜索和不带侧边栏的登录。我怎样才能做到这一点?
辅助路线是执行此操作的正确方法吗?或者还有其他方法可以正确地做到这一点吗?
小智 0
我在 Github 中发现了一个问题,提出了同样的问题:Auxiliary paths with Clean URL,给出的答案是提供 Angular 的UrlSerializer的自定义实现。
尝试这个:
自定义 url-serializer.ts
import { DefaultUrlSerializer, UrlTree, UrlSerializer } from '@angular/router';
export class CustomUrlSerializer implements UrlSerializer {
private defaultUrlSerializer: DefaultUrlSerializer = new DefaultUrlSerializer();
parse(url: string): UrlTree {
// Manipulate the url string here as per requirement
let newUrl = url.split('(')[0];
let urlTree: UrlTree = this.defaultUrlSerializer.parse(newUrl);
return urlTree;
}
serialize(tree: UrlTree): string {
return this.defaultUrlSerializer.serialize(tree);
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序模块.ts:
import { NgModule } from '@angular/core';
import { UrlSerializer } from '@angular/router';
import { CustomUrlSerializer } from './custom-url-serializer';
@NgModule({
// other properties
providers: [
{
provide: UrlSerializer,
useClass: CustomUrlSerializer
}
]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
请记住,Angular 在解析 URL 时不再了解您的辅助路由,因为我们删除了它。因此,您应该通过其他方式处理它,例如使用服务来了解您所在的辅助路线或使用 queryParams 等...
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |