从observable.create()中设置类变量

时间:2017-08-22 14:33:48

标签: angular ionic2

我在Observable.create()语句中设置类变量时遇到问题。变量保持未定义。 (不确定这是否重要,但这是使用离子框架)。 AuthenticationService在app.module.ts ..中被“注入”一次。

可注入类(我正在尝试设置currentUser变量):

@Injectable()
export class AuthenticationService {
    currentUser: User;

    login(email, password): Observable<boolean> {
        return Observable.create(function(observer) {
            var loggedIn = true; //Do call to login service

            if(loggedIn) {
                this.currentUser = new User("Test_Fname", "Test_Lname");
            }

            observer.next(loggedIn);
            observer.complete();        
        });
    }
}

Controller(我正在调用login函数):

import { AuthenticationServiceProvider, Credentials } from '../../providers/authentication-service/authentication-service';

@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {
  constructor(private authService: AuthenticationServiceProvider) {

  }

  login() {
    this.authService.login("test@test.com", "password123!")
    .subscribe(authenticated => {
        if(authenticated) {
          console.log("Logged in!");        
          console.log(this.authService.currentUser); // UNDEFINED!!!  
        } else { 
          console.log("Login failed!");
        }
      }
    );
  }  
}

我可以看到“已登录!”控制台消息,但currentUser仍未定义。如果我从Observable.create()之外设置currentUser它就可以了。我做错了吗?

感谢。

1 个答案:

答案 0 :(得分:0)

使用箭头功能=>。使用function关键字时,您将无法访问this。请将您的代码更改为以下代码:

login(email, password): Observable<boolean> {
    return Observable.create( observer => {
        var loggedIn = true; //Do call to login service

        if(loggedIn) {
            this.currentUser = new User("Test_Fname", "Test_Lname");
        }

        observer.next(loggedIn);
        observer.complete();        
    });
}