更新:另外,如果有人能告诉我如何简化我的代码,我将不胜感激。
简而言之: 我将简单的验证规则应用于元素
<div ng-form='myForm'>
<input ng-model='row.item[0].field' required />
</div>
我也有样式来为无效条目着色
.ng-invalid { background:red }
当我从输入框中删除值时,它的背景颜色发生了变化,但是也row
没有出现row.item
,row.item[0]
并且row.item[0].field
出现了$error
属性。myForm.$error
也没有任何东西。
所以我无法在输入框下方打印验证消息
更长的解释:
我可能有比这更广泛的问题。这是我的设置(简化):
标记:
代码:
function tableCtrl($scope) {
var fields = $scope.fields = [
{ name: 'events', required: true }
,{ name: 'subjects' }
,{ name: 'affected'}]
$scope.events = [{ name : 'e', type :'some', organ :'blood'
, items : [{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 } ] }
, { name:'f', type : 'any', organ :'heart'
, items :[{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 } ]}
, { name: 'g', type: 'all', organ :'skin'
, items : [{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 }
,{ events : 1, subjects: 2, affected : 3 } ]}]
}
angular.module('components').directive('editor', function ($compile) {
return {
scope : {
row : '=editor'
, fields : '=fields'
},
terminal:true,
link: function (scope, element, attrs) {
var tmpl = ''
for (var g in row.items ) {
var itemPath = 'row.items['+g+']'
for (var f in scope.fields) {
tmpl += '<td><input type="number" ng-model="'+itemPath+'.'+scope.fields[f].name + '"' +
' min="0" ' +
(scope.fields[f].required? ' required ' : '' )+
' /></td>'
}
}
var newElement = angular.element(tmpl);
$compile(newElement)(scope);
element.replaceWith(newElement);
}
}
所以我正在动态创建输入框。