【发布时间】:2018-07-09 11:27:43
【问题描述】:
自从创建了一个新的 Angular 6 项目后,我复制的一些以前的代码似乎无法正常工作。这似乎主要是 rxjs 语法
在.map上,显示错误:
[ts] Property 'map' does not exist on type 'Observable'<User>'.
我似乎在 .take
的另一个文件上遇到了类似的错误有人能指出我正确的方向来解决这个问题吗?
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { AngularFireAuth } from 'angularfire2/auth';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/take';
import 'rxjs/add/operator/do';
@Injectable()
export class LoginGuardService implements CanActivate {
constructor(
private router: Router,
private auth: AngularFireAuth
) { }
canActivate(): Observable<boolean> {
return this.auth.authState.map(authState => {
if (authState) this.router.navigate(['/folders']);
return !authState;
}).take(1);
}
}
第二后卫
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):
Observable<boolean> {
this.authGuardStateURL = state.url;
return this.auth.authState.pipe(
take(1)
.map(authState => !!authState)
.do(auth => !auth ? this.router.navigate(['/login']) : true)
)
}
【问题讨论】:
-
在 RxJS 6 中不能使用“补丁”样式的操作符。您可以安装
rxjs-compat包 (github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/…) 甚至更好地更新 RxJS 6 的代码。github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/…
标签: rxjs angular6 angularfire5