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',我可以使用它。建议?