我使用angular 2 http成功发布了一个帖子请求。
我遇到的问题是当我尝试从成功处理程序执行一个函数时。我从中得到的错误是:error_handler.js:48 EXCEPTION: this.setCookie is not a function
我的组件:
onSubmit(userData: any): void {
this.user = new UserData(userData);
this.services.getAccess(this.user).subscribe();
}
我的服务:
getAccess(user: UserData): any {
let headers = new Headers();
let client_id = 'fge432358768979fgwefg34f34';
let credentials = 'grant_type=password&client_id=' + client_id + '&client_secret=' + user.secretKey + '&username=' + user.email + '&password=' + user.password;
headers.append('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post(
this.baseApiUrl + '/oauth/access_token',
credentials,
{
headers: headers
}
)
.map(this.handleSuccess)
.catch(this.handleError);
}
handleError(error: Response | any) {
console.log('error');
swal("Oops...", 'The informations you’ve entered doesn’t match any account. ', "error");
return Observable.throw(error);
}
handleSuccess(res: Response) {
if (res.status === 200) {
swal(
{
title: "Good job!",
text: "You have successfully logged in.",
timer: 2000,
type: "success",
showConfirmButton: false
}
);
this.setCookie(res.json().access_token)
}
}
setCookie(accessToken: string): void {
this.cookie.setForOneHour(accessToken);
}
}
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
您必须绑定this
以保留上下文。
您可以使用
.map(this.handleSuccess.bind(this))
使用箭头功能
.map(data => this.handleSuccess(data))
请记住,这同样适用于.catch()