我有一个<table>
每行有几个input type="text"
. 我想验证输入是否为空,如果是,则向此输入字段添加一个 CSS 类,该类将显示错误。我得到的$scope
只是$$hashKey
,我知道这是标识ng-repeat
列表元素的唯一值。
给定这个,我怎么能得到 DOM 对象$$hashKey
?我正在使用开发人员工具进行挖掘,但没有找到。
我有一个<table>
每行有几个input type="text"
. 我想验证输入是否为空,如果是,则向此输入字段添加一个 CSS 类,该类将显示错误。我得到的$scope
只是$$hashKey
,我知道这是标识ng-repeat
列表元素的唯一值。
给定这个,我怎么能得到 DOM 对象$$hashKey
?我正在使用开发人员工具进行挖掘,但没有找到。
与其尝试从控制器(或服务)中操作 DOM(即查找和元素以及添加/删除类),不如从指令中进行操作。
编写一个将为您进行验证的指令:
.directive('validateField', function(){
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attrs, ngModel){
scope.$watch(attrs.ngModel, function(newVal, oldVal){
var isValid = false;
// do some validation checking on newVal here
ngModel.$setValidity('tableInput', isValid);
});
}
};
});
如此处的文档中所述,该$setValidity
函数将根据您提供的任何键自动为您添加一个类到元素中。在这种情况下,我们提供了一个 key ,'tableInput'
因此它会添加一个ng-invalid-table-input
模型无效时的类,ng-valid-table-input
以及模型有效时的类。
所以在你的 CSS 中,你现在要做的就是创建一个带有一些特殊样式的规则:
input.ng-invalid-table-input{
/* special styles go here */
}
input.ng-valid-table-input{
/* special styles go here */
}
然后你会在你的视图中使用它:
<table>
<tr ng-repeat="things in listOfThings">
<td ng-repeat="thing in things">
<input type="text" ng-model="someValue" validate-field />
</td>
</tr>
</table>
然后表格中的任何输入都将被动态(自动)验证和设置样式。那有意义吗?您必须修改上面的示例,但希望它能为您指明正确的方向。