我正在尝试构建一个类似于Google Map的以 map 为中心的应用程序。因此主要是一个 map ,根据URL路线,一个组件会加载到一个小的侧面板中。
export const routes: Routes = [
{path: 'home/:coordinates', component: HomeComponent},
{path: 'dashboard/:coordinates', component: DashboardComponent},
{path: 'utils/:coordinates', component: UtilsDemo},
];
我想实现的目标类似于Google Maps:
/home/@54.072,-2.899->加载
HomeComponent
并导航至坐标54.072,-2.899/dashboard/@53.123,2.345->加载
DashboardComponent
并导航到坐标54.123,2.345但是,
:coordinates
参数不应在组件本地,而应在全局范围内。否则,我必须在每个组件中执行导航部分。换句话说:如果我这样做:
this.route.params.subscribe(params => {
console.log(params['coordinates']);
});
从
AppComponent
内部,未定义参数。它仅在每个特定组件内部起作用。在Angular5中有什么方法可以做到这一点?
最佳答案
也许Route Resolver
是您的选择。它通常用于在导航到路由之前从服务器获取数据,但是您可以将导航逻辑放在其中。
NavigationResolver
resolve
方法中,您提取参数并启动导航逻辑resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Crisis> {
let coordinates = route.paramMap.get('coordinates');
// This is where your navigation happens
return this.navigateTo(coordinates)
}
NavigationResolver
添加到应处理参数的所有路由中:{
path: 'home/:coordinates',
component: HomeComponent,
resolve: {
navigationResult: NavigationResolver
}
},
ngOnInit() {
this.route.data
.subscribe((data: { navigationResult: NavigationResult }) => {
this.navigation = data.navigationResult;
});
}
在官方docs中阅读有关
Route Resolvers
的更多信息。关于javascript - Angular 路由器中全局可用的URL参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50154351/