angular - Angular 5/6 解析器和 Observable
问题描述
试图在 Angular 6 中使用解析器,我真的快疯了。
我的解析器,工作版本:
@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.create 没有完成可观察流。因此,订阅您的路线不会发出任何内容。你应该尝试这样的事情:
import { of } from 'rxjs/observable/of';
return of(true);
这将返回一个完整的 observable。或者你也可以这样做:
return Observable.create((observer) => {
observer.next(true);
observer.complete();
});
让我知道..
推荐阅读
- python - Django 信号即使对于 django 也能正常工作 - 为模型编写时是管理员
- python - 熊猫重命名后熊猫concat没有提供任何条目
- drupal - drupal webform 确认消息匿名用户
- reactjs - 运行两个不以 package.json 结尾的脚本
- ssl - 在 tomcat 8 中启用 SSL
- python - 从谷歌存储桶下载文件
- php - php artisan migrate 没有做任何事情
- excel - 多个期间的天数,减去任何重叠
- xamarin - Xamarin Forms Prism MVVM 嵌套 TabbedPage 问题
- python - Python dash服务器未更新