【发布时间】:2017-10-17 22:30:34
【问题描述】:
在我自己实施解决方案之前,我想知道当数据绑定的属性值刚刚改变时,是否有一种简单的方法可以改变元素的样式(简短的突出显示)。
我的 DOM 中有很多元素,所以我不想在组件中存储和维护专用属性。
我要突出显示的元素是传统输入表单的元素:
<tr field label="Lieu dépôt">
<select class="cellinput" #lieuDepotBon [(ngModel)]="rapport.LieuDepotBon" (ngModelChange)="changeRapport({LieuDepotBon:$event})">
<option [ngValue]="null"></option>
<option [ngValue]="i" *ngFor="let depotBonChoice of DepotBonInterventionValues; let i = index">{{DepotBonIntervention[i]}}</option>
</select>
</tr>
<tr field *ngIf="rapport.LieuDepotBon==DepotBonIntervention.Autre" label="Autre lieu">
<input class="cellinput" #autreLieuDepotBon [(ngModel)]="rapport.AutreLieuDepotBon" (ngModelChange)="changeRapport({AutreLieuDepotBon:autreLieuDepotBon.value})" />
</tr>
我听说过 Angular2 使用 ngModel 指令在元素上设置的特殊类样式可以帮助完成我需要的操作,但我找不到更多相关信息。
【问题讨论】:
-
这个问题只针对
input元素吗?changed是什么意思? 我听说 Angular2 设置了特殊的类样式 - 你的意思是ng-dirty类吗?如果是这样,请尝试简单地为input.ng-dirty {background-color: green}添加样式 -
它特定于带有 ngModel 指令的元素。似乎 ng-dirty/ng-touched 没有提供解决方案,因为它们依赖于用户对控件的操作。在我的情况下,更改不是由用户执行的。这只是数据模型的变化。
-
在我的情况下,更改不是由用户执行的。 - 你能举个例子吗?
-
更改是通过数据结构的合并来执行的,我为此使用了 lodash。这是一个示例 Lodash.merge(updatedInter, newData)。我的表单控件绑定到那些合并结构的一些数据。
-
好吧,也许你可以装个简单的小工具?
标签: css angular typescript controlvalueaccessor