将服务注入到路由器Guard的CanActivate方法中

时间:2016-09-13 19:50:16

标签: angularjs angular typescript

在重定向到页面之前我正在使用以下服务进行简单检查

  import { Injectable,OnInit } from '@angular/core';
    export class UserCheck {
    private userState:boolean = false;
        get isValid(): boolean{
            return this.userState;
        }
        set isValid(usrstate){
        this.userState = usrstate;
        }  
    }

用户检查是在另一个服务中将isValid设置为true或false的服务; 假设另一个服务已将isValid设置为true,我使用提供程序来生成UserCheck usercheck服务的sigle实例。但是当守卫实际上被执行时,不考虑设置为真的值。

    import { CanActivate,ActivatedRouteSnapshot,RouterStateSnapshot } from '@angular/router';
    import { UserCheck } from './UserCheck' ;
    import { Observable } from 'rxjs/Rx';
    import { Injectable } from '@angular/core';

    @Injectable()
    export class UserDetailGuard implements CanActivate{            
        constructor (private usrstate:UserCheck){ 
            console.log ("guard in action " + this.usrstate.isValid) }
        canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot) : Observable<boolean> | boolean{
            console.log ("guard executed.. " + this.usrstate.isValid)
                return this.usrstate.isValid;
        }
    }

只要在构造函数代码中的控制台日志this.usrstate.isValid中可以看到guard in action true的页面加载值为true(参见图像),但是当我实际导航到页面时,它不会考虑{的值{1}}并指定默认值false。

enter image description here

app.module.js 删除了不必要的代码..

this.usrstate.isValid

0 个答案:

没有答案