我有一个login()
函数,在我的模板中,有一个绑定到组件的{{message}}
变量。角度2绑定似乎在异步操作后被移除
这里的登录功能:
login() {
this.busy = true;
this.message = 'Trying to log in ...'; // correctly updates the template here
this.authService.login().subscribe(
() => {
this.busy = false;
if(!this.authService.isAuthenticated()) {
return;
}
this.router.navigate(['/']);
},
error => {
console.log(this.message);
console.error(error);
this.busy = false;
this.setErrorMessage();
console.log(this.message);
}
);
}
的问题是“错误”回调里面,当我打电话this.setErrorMessage()
,模板没有得到更新。 我在this.setErrorMessage()
之后做了console.log(this)
,并且组件变量确实设置正确,但它并未反映在HTML中。
任何想法?
更新: 更新了error
函数。也尝试与.catch()@GünterZöchbauer建议。没有运气寿。
这里的setErrorMessage()
功能:
setErrorMessage() {
this.message = 'There was an error while trying to log you in. Please try again in a few moments!'
}
相关模板部分:
<p id="GB-login-frame-text">
{{message}}
</p>
的authService.login()
函数返回一个Observable
像这样:
login():Observable<any> {
return this.http.get(API_URL + "/login", {headers: this.headers()})
.map(this.parseResponse)
.catch(this.handleError);
}
的parseResponse
和handleError
个功能:
private parseResponse(response:Response):any {
let result = response.json();
return result.data || {};
}
private handleError(error:any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
if(error.status == 401) {
localStorage.removeItem('user');
window.location.href = '/login';
return;
}
return Observable.throw(errMsg);
}
和控制台输出时error
函数被调用:
Trying to log in ...
login.component.ts:39 Object {error: "A generic error occurred"}(anonymous function) @ login.component.ts:39SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.error @ Subscriber.ts:204Subscriber._error @ Subscriber.ts:137Subscriber.error @ Subscriber.ts:107(anonymous function) @ auth.service.ts:50SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.next @ Subscriber.ts:192Subscriber._next @ Subscriber.ts:133Subscriber.next @ Subscriber.ts:93onLoad @ http.umd.js:1104ZoneDelegate.invokeTask @ zone.js:356Zone.runTask @ zone.js:256ZoneTask.invoke @ zone.js:423
login.component.ts:42 There was an error while trying to log you in. Please try again in a few moments!
的message
正在于它似乎组件js
部分正确更新,但它不html
反映。
你能向我们展示了模板和'setErrorMessage'方法? – rinukkusu
完成,但该代码是非常微不足道的。 –
你可以在Plunker中重现吗? –