Angular 5/6 Resolver and Observable

时间:2018-05-10 13:25:04

标签: angular typescript angular-resolver

我真的很想尝试在Angular 6中使用Resolver。

我的解析器,工作版本:

    @Injectable()
export class MyResolver implements Resolve<boolean> {
    constructor() {
    }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
        return true;
    }

我在路由中注入了这个:

path: "secure",
    component: SecureComponent,
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    resolve: {
        myValue: MyResolver
    }

这很正常,组件构造函数被触发,我可以从路径中检索myValue。

但是一旦我将我的解析器更改为:

return Observable.create(true);

或者任何返回Observable而不是普通值的代码不再触发组件的构造函数,并且在我的路由中得到一个空白页面。解析器代码仍然完整运行。

我通过在构造函数的第一行放置一个console.log(“foo”)来验证构造函数没有被触发,并且没有被调用。

所以我无法理解为什么我无法从我的解析器输出一个observable。解析器的重点是解决延迟值(从而返回可观察量)。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Observable.create accepts a function作为参数。

Observable.create(true)会导致订阅错误。该组件未实例化,因为存在未捕获的导航错误。

如果解析器应该返回现有值,则应该按原始代码显示:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return true;
}