Angular 5 *ngIf 指令对构造函数中的布尔变量表现得很奇怪

Angular 5 *ngIf directive behaving weird with the boolean variable from constructor

我在我的项目中使用 Angular 5.2 版本,它在 DEV 区域中出现了非常奇怪的问题。

HTML 组件代码如下所示:-

    <div [hidden]="!_isFlag">
        <div class="pt-2 row">
            <div class="col-xs-12 col-md-3">
                <div class="form-group">
                   <input type="text" class="form-control" id="pName" placeholder="Last Name">
                 </div>
             </div>
          </div>                    
  </div>


   <div [hidden]="_isFlag">
        <div class="pt-2 row">
            <div class="col-xs-12 col-md-3">
                <div class="form-group">
                    <input type="text" class="form-control" id="pNum" placeholder="Given Number">
                </div>
            </div>    
        </div>
</div>

和 component.ts 文件如下所示。 _currUser 是在 localStorage 对象的帮助下填充的,这对于每个登录用户都是不同的。

    public _isFlag: boolean = false;    

    constructor(){
            this._isFlag= (<boolean>_currUser.isFlag);
    }

出于某种原因,只有 html 代码的第一块被渲染,而不考虑 _isFlag 值。 HTML 代码的第二个块永远不会出现,即使它满足 _isFlag 值。

这真的很奇怪。

isFlag的值很可能是"false"的字符串"true"而不是值true或value; if("false") 实际上为真,因为字符串在 javascript 中转换为真值。试试这个:

constructor(){
    this._isFlag= (_currUser.isFlag === 'true');
}

试试下面的方法。

不是在构造函数中分配标志,而是在 ngOnInit 中分配它。

ngOnInit(){

this._isFlag= (<boolean>_currUser.isFlag);
}