我正在尝试将登录用户的详细信息提供给我的应用程序。下面的代码在角5中工作,但在角6中不工作,因为rxjs 6中缺少.share()函数。
我需要.share()函数吗?对于rxjs 6的更改,我的代码看起来还好吗?
export class UserService {
readonly baseUrl = `${environment.apiUrl}/auth`;
private loggedIn = false;
private currentUserSubject = new BehaviorSubject<LoggedInUser>({} as LoggedInUser);
currentUser = this.currentUserSubject.asObservable().share();
constructor(private http: HttpClient) { }
login(userLogin: UserLogin) {
return this.http.post<any>(this.baseUrl + '/login', { username: userLogin.email, password: userLogin.password })
.subscribe(result => {
localStorage.setItem('auth_token', result.auth_token);
this.setCurrentUser();
return true;
});
}
setCurrentUser(): void {
if (localStorage.getItem("auth_token")) {
let jwtData = localStorage.getItem("auth_token").split('.')[1]
let decodedJwtJsonData = window.atob(jwtData)
let decodedJwtData = JSON.parse(decodedJwtJsonData)
this.currentUserSubject.next(
{
firstName: decodedJwtData.given_name,
id: decodedJwtData.id,
}
);
}
}
getCurrentUser(): LoggedInUser {
if (this.currentUserSubject.value.id) {
return this.currentUserSubject.value;
}
}
ngOnDestroy() {
this.currentUserSubject.unsubscribe();
}
isLoggedIn() {
this.setCurrentUser();
if (this.currentUserSubject.value.id) {
return true;
}
return false;
}
}发布于 2018-06-16 05:53:45
RxJS v5.5.2+已经转移到Pipeable操作符,以改进树的抖动,并使创建自定义操作符变得更容易。现在需要使用operators方法组合pipe
新进口
import { share} from 'rxjs/operators';修改代码
currentUser = this.currentUserSubject.asObservable().pipe(share());RxJS 6 - What Changed? What's New?
我需要.share()函数吗?
取决于用例,如果不使用多异步pipe,则不需要share操作符
Subject充当源Observable和许多observers之间的桥梁/代理,使得多个observers共享相同的Observable执行成为可能。
异步管道不对模板中的多个重复使用共享或进行任何优化。它为模板中异步管道的每次使用创建一个订阅。
https://stackoverflow.com/questions/50885262
复制相似问题