Angular 2路由已弃用:如何检测CanActivate
Angular 2 routing-deprecated: How to detect CanActivate?
我有一个用@CanActivate
装饰的组件。
@Component({
// ...
})
@CanActivate(() => false)
export class UserManagementComponent {
// ...
}
在我的导航菜单中,我想禁用或隐藏导航到此路线的链接。我该怎么做?
<a [routerLink]="['UserManagement']">User management</a>
PS:我仍然使用不推荐使用的路由机制,而不是rc1版本。
如果将@CanActivate(() => ...)
返回值的计算转移到服务,则可以从整个应用程序访问它。您可以创建一个指令并将其添加到routerLink
,该指令注入服务,并在路由的条件返回false
时禁用routerLink
。
请参阅http://almerosteyn.com/2016/04/linkup-custom-control-to-ngcontrol-ngmodel了解如何在CCD_ 6中使用DI。
请参阅Angular 2,禁用routerLink和Angular2,禁用锚点元素的正确方法是什么?有关如何禁用routerLink
我相信注入服务是一种方法,因为如果您需要从其他附加组件路由到您的组件,这会容易得多,而且您不必复制反射代码。
话虽如此,我确实很好奇如何进行反思。因此,它似乎应该被添加到ES7规范中。目前,"反射元数据"为它打包了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);
}
...
}
来源:
http://blog.wolksoftware.com/decorators-metadata-reflection-in-typescript-from-novice-to-expert-part-4
https://www.npmjs.com/package/reflect-metadata
- 如何检测是否有溢出
- 如何检测用于WebGL的专用或集成显卡
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 如何使用密码检测网络中的状态连接
- 使用JavaScript检测Flash
- 在不阻止默认行为的情况下检测IE10中的缩放
- 检测个位数整数时正在转换毫秒
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 动态插入的表:JQuery未检测到最后一行
- 检测页面上某个元素中选择(突出显示)或单击的内容
- jQuery检测浏览器是否支持Zoom
- 检测iframe是否跨域的愚蠢方法
- 检测图像分辨率
- 如何检测第三方广告服务器请求
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 当没有文本输入聚焦时检测空格键按下
- 正在检测导航到<a name=“;最新主题”></a>
- 如何检测重叠元素下的单击
- 如何检测负责网站某些部分的JavaScript根文件