首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换rxjs6中的share()函数

替换rxjs6中的share()函数
EN

Stack Overflow用户
提问于 2018-06-16 05:34:45
回答 1查看 2.3K关注 0票数 2

我正在尝试将登录用户的详细信息提供给我的应用程序。下面的代码在角5中工作,但在角6中不工作,因为rxjs 6中缺少.share()函数。

我需要.share()函数吗?对于rxjs 6的更改,我的代码看起来还好吗?

代码语言:javascript
复制
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;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 05:53:45

RxJS v5.5.2+已经转移到Pipeable操作符,以改进树的抖动,并使创建自定义操作符变得更容易。现在需要使用operators方法组合pipe

请参阅此

新进口

代码语言:javascript
复制
import { share} from 'rxjs/operators';

修改代码

代码语言:javascript
复制
   currentUser = this.currentUserSubject.asObservable().pipe(share());

RxJS 6 - What Changed? What's New?

我需要.share()函数吗?

取决于用例,如果不使用多异步pipe,则不需要share操作符

Subject充当源Observable和许多observers之间的桥梁/代理,使得多个observers共享相同的Observable执行成为可能。

异步管道不对模板中的多个重复使用共享或进行任何优化。它为模板中异步管道的每次使用创建一个订阅。

参考RxJS: Understanding the publish and share Operators

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50885262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档