canActivate Observable未被调用

时间:2016-08-25 00:18:15

标签: angular router

Angular 2 - RC.5

路由器 - 3.0.0-rc.1

我觉得我真的很接近解决方案,但我的想法已经用完了。

我的问题与this StackOverflow question非常相似,但我无法使其发挥作用。

我在一个保护中有一个canActivate方法,需要检索一个包含管理员数组的Observable表单,然后将该列表与登录用户进行比较。没有所有管理检查逻辑,它看起来像这样:

canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observable<boolean>|boolean {
    console.log('In canActivate')
    return this.formService.currentForm$.map((form) => {
      console.log("In Observable")
        if (form.admins.length > 0) {
          console.log("GOOD!!")
          return true
        }
        console.log("BAD!!!")
        return false;
      }).take(1)

我怀疑currentForm$观察者设置错误但我不知道如何。以下是FormService

中的相关信息
@Injectable()
export class FormService {
  private currentFormSource: Subject<Form>;

  constructor() {
    this.currentFormSource = new Subject<Form>();
  }

  get currentForm$() {
    return this.currentFormSource.asObservable();
  }
}

我目前没有错误,它只是没有做任何事情。除了In canActivate之外,没有任何内容记录到控制台,并且页面仍受限制。感谢您提供任何建议。

更新

FormService内部是一个名为getForm('form-name')的方法,当form.component文件初始化时,该方法应该被调用。这会发出this.currentFormSource.next(this.dataStore.currentForm);。我发现这将是一个问题,因为它是在canActivate调用订阅之前发出的。但我还发现getForm方法根本没有被调用,因为在父组件加载之前正在检查canActivate子项,所以我必须找到一些其他地方来设置表单。我可以在后卫中做到这一点,但我希望将它用作多种不同形式的一般防守,这些形式将从其父组件设置currentForm。

就是这样。

/form(1,2,3,4,5, etc)
/form(1,2,3,4,5,etc)/admin

我想从父form组件设置当前表单,但如果canActivate子路由的admin未通过,则不会加载它。如果有办法将变量传递给路线'canActivate',我可以使用它。建议?

0 个答案:

没有答案