* ngIf在angular2中的组件类变量

时间:2017-12-29 21:40:45

标签: angular angular-components

我想在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,并在调用完成后隐藏它。

3 个答案:

答案 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>