Angular 角形+;自举';无效'';有效';

Angular 角形+;自举';无效'';有效';,angular,bootstrap-4,Angular,Bootstrap 4,想象一下,我有一个小表单,并使用反应式方法 例如,我有两个输入 ... <input formControlName="name" name="name" type="text" class="form-control"> <input formControlName="amount" name="amount" type="text" class="form-control"> ... 有没有更好的办法。真正让我恼火的是html中有很多“泥” 所以,如果表单应该具有默

想象一下,我有一个小表单,并使用反应式方法 例如,我有两个输入

...
<input formControlName="name" name="name" type="text" class="form-control">
<input formControlName="amount" name="amount" type="text" class="form-control">
...
有没有更好的办法。真正让我恼火的是html中有很多“泥”

所以,如果表单应该具有默认样式,则表示页面已加载并 输入没有被触动

我发现我可以做到这一点,但仍然猜测有更好的方法。我说的“更好”是指不会让html变得如此肮脏

<input formControlName="name" name="name" type="text" class="form-control"
[ngClass]="{'is-invalid': name.invalid && name.touched, 
            'is-valid': name.valid, '': name.untouched}"
如果它是集中的,那么让边界看起来很好

input.ng-invalid.ng-touched:focus{ 
    box-shadow: 0 0 0 0.2rem rgba(255,10,29,0.25) !important; 
}

您不需要添加任何与表单控件状态更改相关的类。默认情况下,您只需要添加与这些类相关的样式

input.ng-invalid.ng-touched {
    border: 1px solid red;
 }

此类表示输入控件无效且已设置为toched,这意味着您只需处理样式。

您可以在组件中使用通用方法:

isValid(字段:字符串){
return(!this._-form.get(field).valid&&this._-form.get(field).touch)?“无效”:this._-form.get(field).touch“有效”:“;
}
然后在元素引用中

[class]=“isValid('title')”
它非常简单

您只需在模板中正确设置
[ngClass]
,并使用#和ngModel值命名字段表单(例如
#myfieldname=“ngModel”
)。 如果使用引导,则可以使用
是有效的
是无效的类
,如下所示:



正如@Muhammed在上面所说的,我需要做的最好的方法就是通过css来做,在bootstrap 4中这只是我的一小部分贡献。问题是它添加了边框阴影,所以对我来说完整的解决方案是:对于无效的输入。ng无效。ng触摸{边框颜色:rgba(255,10,29,1)!重要;方框阴影:无!重要;}如果它聚焦,则使边框看起来很好输入。ng无效。ng触摸:聚焦{方框阴影:0 0.2rem rgba(255,10,29,0.25)!important;}这应该标记为最佳答案。事实上,这是这里唯一的好答案。
input.ng-invalid.ng-touched{ 
    border-color: rgba(255,10,29,1) !important; box-shadow: none !important; 
} 
input.ng-invalid.ng-touched:focus{ 
    box-shadow: 0 0 0 0.2rem rgba(255,10,29,0.25) !important; 
}
input.ng-invalid.ng-touched {
    border: 1px solid red;
 }