2017-08-11 128 views
0

我的表單驗證在ng類下工作,在某些情況下,我想將一個級別的類複製到父容器。在聲明前訪問視圖變量

<div [ngClass]="{'ng-invalid': input.invalid, 'ng-valid': input.valid, 'ng-pristine': input.pristine}"> 
    <input [name]="control.id" [(ngModel)]="control.value" required #input="ngModel"> 
</div> 

該方法適用於大多數情況,但我得到了控制檯上出現以下錯誤:

Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'false'. Current value: 'true'.

有沒有一種方法,我可以引用定義之前的視圖變量?

+0

我認爲這是更多的問題,你開始的東西,改變了某個變量,然後在這一事件的衝擊,它又改變了。 – Laoujin

+0

如果我在輸入之後在元素上放置了[ngClass] =「{'ng-invalid':input.invalid,'ng-valid':input.valid,'ng-pristine':input.pristine}」拋出任何錯誤。 –

回答

1

如果您不確定某個變量是否會被定義,您可以使用Elvis算子。

<div [ngClass]="{'ng-invalid': input?.invalid, 'ng-valid': input?.valid, 'ng-pristine': input?.pristine}"> 
    <input [name]="control.id" [(ngModel)]="control.value" required #input="ngModel"> 
</div> 

也許你可以創建一個封裝了ngClass和輸入的新組件? input.xxx使它看起來像你應該使用FormControls:他們爲你做有效/無效/原始的東西..