2017-08-11 142 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:他们为你做有效/无效/原始的东西..