Angular 2 - EXCEPTION:表达' ngClassUntouched在检查后发生了变化

时间:2016-03-31 11:41:57

标签: angular angular2-forms

完整的错误消息是:

  

angular2.dev.js:23597 EXCEPTION:Expression' ngClassUntouched in   myComponent的@ 7:12'检查后发生了变化。以前的价值:   '真&#39 ;.当前价值:' false'在[ngClassUntouched in   MyComponent的@ 7:12]

错误指向此控件:

REGION="${REGION//-/_}"            # Bash
REGION="$(echo "$REGION"|tr - _)"  # POSIX

基本上,当我执行以下命令将焦点从searchTxt更改为动态创建的输入时,会在keyup事件中发生这种情况:

<input [(ngModel)]="searchTxt" class="searchText" type="text" 
class="form-control" placeholder="Search all departments & sites"
(keypress)="handleKeyboard($event)" [ngClass]="{noBorder: tags.length >     
0}" (keyup)="handleKeyboard($event)" autocomplete="off"/>

更多细节:这是动态创建的输入数组:

this.inputs.toArray()[0].nativeElement.focus();

这些输入是以下结果:

<div *ngFor="#item of records?.data">
<input #input name="r{{item.id}}" class="focusInputBox" type="text"/>
</div>

有什么建议吗?

ty !!!

更新:我注意到在searchTxt上添加了几个类:class =&#34; form-control searchText ng-untouched ng-valid ng-dirty&#34;

当我设置输入框的焦点时,添加了ng-untouched加入searchTxt。

2 个答案:

答案 0 :(得分:2)

将焦点()包裹在setTimeout(...)中这是导致在Angular不期望更改时设置类的原因:

setTimeout(() => {
  this.inputs.toArray()[0].nativeElement.focus();
}, 0);

答案 1 :(得分:2)

也许您可以将ChangeDetectorRef注入您的组件并调用其detectChanges方法:

constructor(private cdr: ChangeDetectorRef) {}

ngOnInit() {
  this.cdr.detectChanges();
}

此方法的调用可以在其他地方完成,因为它取决于您加载标记的方式......