有没有什么办法可以重定向到另一个组件从@CanActivate在Angular2?
是的你可以!这样做会阻止您的组件实例化。
首先,创建一个新文件src / app-injector.ts
let appInjectorRef; export const appInjector:any = (injector = false) => { if (!injector) { return appInjectorRef; } appInjectorRef = injector; return appInjectorRef; };
然后,从引导中获取引用
// ... import {appInjector} from './app-injector'; // ... bootstrap(App,[ ROUTER_PROVIDERS ]).then((appRef) => appInjector(appRef.injector));
最后在你的功能
// ... import {appInjector} from './app-injector'; // ... @CanActivate((next,prev) => { let injector = appInjector(); let router = injector.get(Router); if (42 != 4 + 2) { router.navigate(['You','Shall','Not','Pass']); return false; } return true; })
Etvoilà!
这里已经讨论了https://github.com/angular/angular/issues/4112
你可以在这里找到一个完整的例子http://plnkr.co/edit/siMNH53PCuvUBRLk6suc?p=preview by @brandonroberts