【发布时间】:2017-01-02 19:16:06
【问题描述】:
private login() {
this.http.get(`http://localhost/api/token/${id}`)
.map(res => res.json())
.subscribe(res => {
this.response = res;
if (this.response) {
this.router.navigate(['/']);
} else {
console.log('access denied');
return false;
}
});
}
<p *ngIf="!login()">Wrong password or username</p>
一切都正确编译,但是当我刚刚启动应用程序时,一个无限循环开始了,将数百个access denied 日志发送到控制台。这是令人难以置信。 <p> 在屏幕上可见。
为什么会这样?单击login 按钮时正在调用登录函数。我不必单击它来启动无限循环。它只会在应用出现在浏览器中时发生。
【问题讨论】:
-
可能
*ngIf位于*ngFor循环内? -
@5313M 我不这么认为,伙计
-
显示更多代码。你没有提到你从哪个组件调用登录。显示你的 console.log(res);你的路由文件。当您不返回 true 或 false 时,您正在调用一个函数,它可能返回 null 或 false 所以!会变成真的。
-
为什么难以置信? Angular 必须不断调用该方法来确定它是否仍应显示关联的元素。它会在每一个tick调用该方法,看看是否需要更新页面的状态。
-
@H.Doe 反其道而行之;而不是直接调用该方法的元素,获取 组件 来调用该方法并使用结果设置一个布尔字段(例如
userIsLoggedIn)。该元素只使用该字段:<p *ngIf="!userIsLoggedIn" ....
标签: javascript angular typescript xmlhttprequest