ngAfterViewInit中的打字稿分配变量不起作用

时间:2017-05-05 09:23:48

标签: angular components angular2-components

我正在尝试用角度4创建一个组件,并且遇到了一个我似乎无法解决的非常奇怪的问题。

我有一个简单的boolean,我试图根据@Input设置

@Input('type') inputType: string = 'text';
showTextInput: boolean = false;
...
 ngAfterViewInit() {
    console.log('input', this.inputType);
    this.showTextInput = this.inputType === 'text' ? true : false;
    console.log('after condition', this.showTextInput);
}

该组件的html是

<ts-input-item formControlName="name" 
               [control]="programForm.controls.name" 
               [label]="'Name'" 
               (onUpdateClicked)="updateItem($event,'Name','name')"> 
</ts-input-item>

所以在当前的形式中它应该默认为类型text,它有点做,这就是我变得非常困惑。以下是console.log打印件。

enter image description here

所以现在this.showTextInput等于true。但是,如果我在组件中使用它,那么

  <ion-input #input 
             [type]="inputType" 
             [disabled]="isSelect"
             (keyup)="itemValueChanged(input.value)" 
             (keyup.enter)="itemUpdate()"
             *ngIf="showTextInput">
  </ion-input>

然后组件完全断开。主要是因为它没有显示,因为父组件不处理传递的表单名称,但简单地说,如果我甚至添加类似

的内容
<div *ngIf="showTextInput"> foobar </div>

foobar文字不会显示,也没有错误。我在正确的生命周期钩子中处理传递吗?

1 个答案:

答案 0 :(得分:5)

显式调用更改检测可能会有所帮助:

constructor(private cdRef:ChangeDetectorRef) {}

ngAfterViewInit() {
    console.log('input', this.inputType);
    this.showTextInput = this.inputType === 'text' ? true : false;
    console.log('after condition', this.showTextInput);
    this.cdRef.detectChanges();
}