我通过遍历具有不同问题的对象来向用户进行迭代,从而在视图中动态创建表单。每个问题的属性之一是formFieldName
这是一个随机字符串,我用它来给每个表单字段一个不同的名称。以角度验证具有动态给定名称的表单域
<form name="includedForm.newRequestForm" class="form-horizontal" role="form" novalidate>
<div ng-if="message.question.attributes.structure.type == 'object'">
<div ng-repeat="(index,objField) in message.question.attributes.structure.properties">
<div ng-if="objField.type == 'array'" class="form-group" show-errors>
<label for="{{objField.formFieldName}}" class="control-label col-sm-6">{{objField.title}}
<br /><i><small>{{objField.description}}</small></i></label>
<div class="col-sm-6">
<select class="form-control" name="{{objField.formFieldName}}" multiple ng-model="objField.userValue" ng-required="objField.required">
<option ng-repeat="option in objField.items.enum" value="{{option}}">{{option}}</option>
</select>
</div>
</div>
<div ng-if="objField.type == 'boolean'" class="form-group" show-errors>
<label for="{{objField.formFieldName}}" class="control-label col-sm-6">{{objField.title}}</label>
<div class="col-sm-6">
<input class="form-control" name="{{objField.formFieldName}}" ng-model="objField.userValue" type="checkbox" ng-value="option" ng-checked="message.question.attributes" />
</div>
</div>
</div>
</div>
<div class="col-sm-12">
<button ng-click="markAsDone(message)" class="btn btn-primary">Done</button>
</div>
<form>
在控制器中,我能够获得formFieldName属性,但我无法弄清楚如何使用它来进行验证。
var MarkAsDone = function(message) {
$scope.includedForm = {};
var formField = message.question.attributes.formFieldName;
if ($scope.includedForm.newRequestForm.{{formField}}.$valid){
//submit the form
}
}
如果'formField'实际上是字段的名称,你应该能够使用'如果($ scope.includedForm.newRequestForm [formField] $有效) { //提交表格 }'......必须使用括号表示法来访问作为属性的变量。 –
我试过了,并且在开始ng-repeat之前(在表单元素中)错误:$ scope.includedForm.newRequestForm [formField]未定义' –
add'ng-init =“includedForm.newRequestForm = {}”' ) –