我是角色和打字稿的新手。我收到错误“Unhandled promise rejection TypeError:无法设置属性”
这是我的代码:
login.component.ts
export class LoginComponent implements OnInit {
constructor(private fb: FormBuilder, private loginService: LoginService) { }
submitError = false; // set "true" to show error
onSubmit(){
this.submitError = false;
this.submitErrorText = "";
this.model = this.loginForm.value;
this.loginService.authenticate(this.model.login_id, this.model.password)
.then(res => {
if(res.status == 404){
this.submitError = true;
}
else{
// do something
}
}).catch(function(err: any){
this.submitError = true; // Unhandled promise rejection TypeError: Cannot set property 'submitError' of undefined
});
}
登录-service.ts
import {Injectable} from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class LoginService{
private auth_url = "/login/api/auth";
constructor(private http: Http){};
authenticate(username: String, pass: String): Promise<any>{
return this.http.post(this.auth_url, {username: username,pass: pass})
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}
private handleError(error: any): Promise<any>{
return Promise.reject(error.message || error);
}
}
submitError是类级属性,为什么它不可访问或未定义。 访问它的正确方法是什么?
答案 0 :(得分:4)
您正面临JavaScript中的常见问题。
幸运的是,在ES6和TypeScript中,您可以使用箭头函数(lambda表达式)来词汇性地捕获this
的含义。
}).catch((err:any) => {
this.submitError = true; // this works
});
}).catch(function (err:any) {
this.submitError = true; // this doesn't work
});
有关箭头功能的更多信息:Arrow Functions
答案 1 :(得分:1)
将其更改为:
.catch(
(err:any) =>
{
this.submitError = true;
});
答案 2 :(得分:0)
使用httpService
的好方法是,当您致电httpService
并返回json
数据时,您需要处理此数据,因为它是response
或{ {1}} ..您需要error
数据。
在subscribe
login.component.ts