我有一个用@CanActivate
装饰的组件。
@Component({
// ...
})
@CanActivate(() => false)
export class UserManagementComponent {
// ...
}
在我的导航菜单中,我想禁用或隐藏导航到此路线的链接。我该怎么做呢?
<a [routerLink]="['UserManagement']">User management</a>
PS:我仍然使用不推荐的路由机制,而不是rc1版本。
答案 0 :(得分:2)
如果将@CanActivate(() => ...)
返回值的计算移动到服务,则可以从整个应用程序访问它。您可以创建指令并将其添加到注入服务的routerLink
,并在路由条件返回routerLink
时禁用false
。
有关如何在@CanActivate
中使用DI,请参阅http://almerosteyn.com/2016/04/linkup-custom-control-to-ngcontrol-ngmodel。
有关如何停用routerLink
答案 1 :(得分:0)
我认为注入服务是一种方法,因为如果您需要从其他附加组件路由到您的组件,它将更容易,您不必复制反射代码。
话虽如此,我很好奇如何做反思。所以它似乎应该被添加到ES7规范中。就目前而言,'reflection-metadata'包对它进行了pollyfills,这也是Angular2内部使用的内容。虽然'Reflect'已经是TypeScript库的一部分,但我没有找到任何元数据反射,似乎它只支持对象反射。
//This is a bit hacky, but it might help.
...
export class Test {
...
logType(target : any, key : string) {
//stop TypeScript from mapping this to TypeScript Reflect.
var Reflect = Reflect || {};
//You still get an error if you havn't added the Reflect.js script in the page
var t = Reflect.getMetadata("design:type", target, key);
console.log('key:' + key + ' type: ' + t.name);
}
...
}
来源: