我想在flag变量为true时显示loader并在flag为false时隐藏它(双向数据绑定),但我不知道如何使用* ngIf和组件变量
app.component.ts
import { Component, OnInit } from '@angular/core';
import { User } from '../../models/users.model';
import { UserServices } from '../../services/User.service';
@Component({
selector: 'app-default',
templateUrl: './default.component.html',
styleUrls: ['./default.component.css']
})
export class defaultComponent implements OnInit {
public flag: boolean;
userList: User[];
constructor(private _service: UserServices) {
this.flag = true;
}
ngOnInit() {
this.getData();
}
getData() {
this.flag = true;
this._service.loadData().subscribe( response => { this.userList = response; });
this.flag = false;
}
}
default.component.html
<div *ngIf="flag == true" class="loader">Loading...</div>
<div class="content">
<!--my html-->
</div>
我想只在调用服务时显示加载器div,并在调用完成后隐藏它。
答案 0 :(得分:2)
响应返回时将标志设置为false。否则,您立即将其设置为false:
getData() {
this.flag = true;
this._service.loadData().subscribe( response => {
this.userList = response;
this.flag = false;
});
}
此外,您无需明确检查true
:
*ngIf="flag"
如果你愿意,可以在声明时初始化你的标志,而不是在构造函数中执行它:
public flag: boolean = true;
答案 1 :(得分:2)
将this.flag = false;
移动到subscribe
块中。由于javascript的异步功能,您的flag
在后端调用之前设置为False。
简单的ngIf条件会更好。
<div *ngIf="flag" class="loader">Loading...</div>
getData() {
this.flag = true;
this._service.loadData().subscribe( response => {
this.userList = response;
this.flag = false;
});
}
<强> PLNKR 强>
答案 2 :(得分:1)
您的getData
需要做一些工作:
getData() {
this.flag = true;
this._service.loadData().subscribe((response) => {
this.userList = response;
this.flag = false;
});
}
你的组件可以变得更简单:摆脱额外的比较, ngIf 已经适用于布尔值:
<div *ngIf="flag" class="loader">Loading...</div>