我在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它就可以了。我做错了吗?
感谢。
答案 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();
});
}