首页 > 解决方案 > Angular / Typescript - 无法更新订阅函数中的外部变量

问题描述

下面是我的代码,我只想查询后端是否已经注册了电子邮件,但是,无论我将什么电子邮件传递给 verifyEmail 函数,“已注册”变量始终为 false,如何根据后端响应?谢谢

export class MyClass {

   registered: boolean = false;
   message: string = ''

   verifyEmail(email) { 
        this.registered= false
        
        let verifyEmailUrl = "/backend/GetUserByEmail";
        this.http.post(verifyEmailUrl, {
            email: email
        }).subscribe(
            (data) => {
                if (data["user"]) { // can find a user
                    this.message = 'This email has already been registered'
                    this.registered= true
                }
            });
}

标签: javascriptangulartypescriptwebfrontend

解决方案


你如何检查注册价值?您无法在执行 verifyEmail 后立即获取此值,因为值会在一段时间后更新。您可以创建 BehaviorSubject 然后订阅它并在它更新时在任何地方获取注册值

export class MyClass {

   registered$ = new BehaviorSubject<boolean>();
   message: string = ''

   verifyEmail(email) {             
        let verifyEmailUrl = "/backend/GetUserByEmail";
        this.http.post(verifyEmailUrl, {
            email: email
        }).subscribe(
            (data) => {
                if (data["user"]) { // can find a user
                    this.message = 'This email has already been registered'
                    this.registered$.next(true)
                } else {
                    this.registered$.next(false)
                }

            });
}

在外部代码中:

myClassObject.registered$.asObservable().subscribe(registered => console.log(registered));

推荐阅读