当前位置: 首页 > 知识库问答 >
问题:

替换rxjs6中的的share()函数

皇甫展
2023-03-14

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

我需要这个吗。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;
    }

}

共有1个答案

公孙宇
2023-03-14

rxjsv5。5.2已移动到可管道操作符,以改进树抖动,并使创建自定义操作符更容易。现在,需要使用管道方法组合运算符
请参阅此
新导入

import { share} from 'rxjs/operators';

修改代码

   currentUser = this.currentUserSubject.asObservable().pipe(share());

rxjs6-发生了什么变化?有什么新鲜事吗

我需要这个吗。share()函数

根据您的用例,如果您不使用多个异步管道,您不需要share运算符
主题充当源代码可观察和许多观察者之间的桥梁/代理,使多个观察者共享相同的可观察执行成为可能。

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

参考:RxJS:了解发布和共享运算符

 类似资料:
  • 问题内容: 我试图通过ctypes用Python中定义的回调替换共享库中的现有函数指针。 C中共享库的源代码: Python脚本的来源: 测试它的脚本: 我得到的输出: 因此,似乎在Python(plotxy)中定义的函数是type ,而在C中定义的函数指针是type 。尽管应用了替换in ,但在调用main函数时似乎没有任何效果。 除了阅读https://docs.python.org/3/li

  • 我正在尝试测试点击一种反应成分,以利用酶Sinon 我的Comp组件有一个引发异常的保存功能 当我运行测试时,我希望不会抛出任何错误,并且存根中的空函数会被触发——但事实并非如此。组件内部的实际函数被触发,而不是空的存根。

  • 我想替换我所有Wordpress帖子正文/内容(超过100万)中的所有URL href属性到我的新域“联系我们”URL,如: 喜欢 我可以用php做这个吗?或者有什么插件吗? 我无法将旧域名重定向到新域名,因为它已经过期,我无法访问它。我必须改变URL的href属性在每个Wordpress帖子。

  • 问题内容: 我是bash脚本的新手,但我不理解为什么它不起作用 第3行的替代替换错误 问题答案: 该替换在Bash 4.2.8中正常工作(并且根据文档看起来还不错)。 我最好的猜测是您实际上并没有使用Bash-您如何调用脚本?如果您正在执行此操作,则可能会与Dash或类似的程序一起运行(Dash确实在第3行给出了替换错误)。尝试使用Bash()显式运行它。 如果事实证明您实际上是在使用Dash,这

  • 从本质上讲,我试图遍历变量的内容,实现replace函数,并打印相应的更改。当我执行代码时,变量被打印出来,只是没有得到预期的结果。 预期结果如下: Lorem ipsum dolor坐在那里,有些字符串是有价值的,这是非常重要的。这是一个非常小的问题,当然也可以锻炼身体。在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责中,在谴责

  • 我用Mockito写UT,我想替换我的mock函数(哪个DB选择操作) 使用我在测试类中编写的新函数(使用map模拟数据库选择); 我想用正确的键输入返回正确的值 我试图这样做使用ArgumentCaptor如下,但它没有工作,因为我想 我想当调用dataBaseSelect.selectDataFromDB时,它将被模拟,然后从MapSelect.selectDataFromMap返回结果,参数