Angular 2 Auth Gaurd с использованием выбора магазина ngrx. Мне отписаться?

Я использую асинхронный канал в своих шаблонах для всех значений выбора магазина, поскольку он выполняет всю очистку, включая отмену подписки, самостоятельно.

Но когда я вручную подпишусь на значение в моем auth gaurd, мне нужно будет отписаться от этого? Если да, то как лучше всего это сделать?

@Injectable()
export class AuthGaurd implements CanActivate{

constructor(
    private store: Store<fromRoot.State>,
    private router: Router
){}

canActivate(){
    this.store.select(getLoggedInState).subscribe(res => {
        if(res){
            return true
        }else {
            this.router.navigate(['/login']);
        }
    });
        return false;
    }
}

person notANerdDev    schedule 28.03.2017    source источник
comment
вы не отписались и что вы пытаетесь сделать?   -  person Aravind    schedule 28.03.2017
comment
@Aravind Где мне отписаться? Куда будет идти строка отписки?   -  person notANerdDev    schedule 28.03.2017
comment
Вы не должны подписываться на свою охрану, попробуйте что-то вроде комментария на github. github.com/ngrx/store/issues/270#issuecomment-260845982   -  person Adam    schedule 28.03.2017
comment
@Адам Спасибо!! Это круто!   -  person notANerdDev    schedule 28.03.2017
comment
Это не значит, что вы можете проголосовать за пост   -  person Aravind    schedule 29.03.2017
comment
@Aravind Это был не я...   -  person notANerdDev    schedule 29.03.2017


Ответы (1)


Вы должны использовать take, чтобы получить только первое значение:

canActivate(){
    this.store.select(getLoggedInState).take(1).subscribe(res => {
        if(res){
            return true
        }else {
           c this.router.navigate(['/login']);
        }
    });
        return false;
    }
}

take(n) заставляет наблюдаемый объект принимать первые n значений, которые он получает, а затем завершает работу. В этом случае отписываться не нужно.

person adharris    schedule 28.03.2017