我想根据路由器中的某些routerLink
显示/隐藏Data
。该指令已经完成,但我错过了最重要的部分......
例如,我有以下路由器配置(省略组件):
[
{ path: '', children: [
{ path: 'foo', children: [
{ path: 'bar', data: { requiredPermissions: ['a', 'b'] } }
]}
]},
{ path: 'baz', data: { requiredPermissions: ['c'] }, children: [
{ path: ':id' }
]}
]
现在,我想问Router
如果Route
为routerLink
或/foo/bar
,将会使用/baz/123
。
我查看了Router
源代码(https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts),但找不到一些简单的方法来执行此操作。特别是它如何处理这些:id
变量。
当然,我可以迭代Router.config
,越走越深。但是我必须解析那些变量,正则表达式等等。必须有一种更简单的方法,因为角度路由器也必须在内部完成所有这些工作。
你有什么想法/解决方案吗?
答案 0 :(得分:0)
您可以触发router.navigateByUrl
,等待RouteRecognized
事件并取消导航(例如使用自定义Guard)。 RouteRecognized
将获得所有必要信息。显然这是一个糟糕的解决方案。
还有另一种方法,您可以创建应包含路径+数据的其他结构(有点地图)。例如,结构具有路径struct.baz-route={url:'baz/:id', perm: ['c']}
,然后是[routerLink]="struct.baz-route.url.replace(':id', x)"
,然后是*ngIf="struct.baz-url.perm.indexOf('c')>-1"
。
答案 1 :(得分:-1)
嘿,如果你想要当前路线的数据而不是你想做的那样
import {ActivatedRoute} from '@angular/router';
export class Component {
constructor(private route: ActivatedRoute){
let pathroots = this.route.pathFromRoot;
let pathurl = '';
pathroots.forEach(path => {
path.url.subscribe(url => {
url.forEach(e => {
pathurl += e + '/';
});
});
});
console.log(pathurl,'*******************');
}
}