当前位置:  开发笔记 > 前端 > 正文

重定向到Angular2中@CanActivate内的其他组件

如何解决《重定向到Angular2中@CanActivate内的其他组件》经验,为你挑选了3个好方法。

我们有什么方法可以从Angular2中的@CanActivate重定向到另一个组件吗?



1> superjos..:

截至今天,最新的@ angular/router 3.0.0-rc.1,以下是关于如何通过CanActivate路由防护来做到这一点的几个参考:

    角度2参考

    由Nilz11和Jason提出的这个问题的两个答案

逻辑的主要要点如下:

// ...
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  if (this.authService.isLoggedIn) {
    // all ok, proceed navigation to routed component
    return true;
  }
  else {
    // start a new navigation to redirect to login page
    this.router.navigate(['/login']);
    // abort current navigation
    return false;
  }
}


这应该是新路由器的新首选答案.

2> Stephen Paul..:

Angular 2.0最终解决方案:

您的护理人员可以很容易地成为一种注射剂,因此可以包含自己的注射剂.所以我们可以简单地注入路由器,以便重定向.不要忘记在您的应用模块中将服务添加为提供者.

@Injectable()
export class AuthGuard implements CanActivate {

  constructor(private router: Router, private authService: AuthService) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean {
    if (!authService.isAuthenticated()) {
      this.router.navigate(['/login']);
      return false;
    }
    return true;
  }
}

export const ROUTES: Routes = [
  {path: 'login', component: LoginComponent},
  {path: 'protected', loadChildren: 'DashboardComponent', canActivate: [AuthGuard]}
];



3> Druxtan..:

是的你可以!这样做可以防止组件实例化.

首先,制作一个新文件 src/app-injector.ts

let appInjectorRef;

export const appInjector:any = (injector = false) => {
    if (!injector) {
        return appInjectorRef;
    }

    appInjectorRef = injector;

    return appInjectorRef;
};

然后,从中获取参考 bootstrap

// ...
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

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有