您可以使用 $eval 方法,您可以在此处阅读有关它的更多信息,以将字符串解析为'myDynamicForm.' + formField.formFieldId + '.$error'
表达式。
$scope.$eval在当前作用域上执行表达式并返回结果。表达式中的任何异常都会传播(未捕获)。这在评估 Angular 表达式时很有用
请在此处查看工作 jsfiddle
请记住在您的应用程序配置中注册该ngMessages
模块。
HTML:
<div class="container">
<div class="row">
<div class="col-sm-4" data-ng-controller="DynamicFormController as vm">
<form name="myDynamicForm" novalidate>
<div class="form-group" data-ng-repeat="formField in formFields">
<label for="{{formField.formFieldId}}">{{formField.label}}</label>
<input class="form-control" name="{{formField.formFieldId}}" id="{{formField.formFieldId}}" ng-required="{{formField.isMandatory}}" type="text" ng-model="formField.value">
<div ng-messages="vm.onValidateMessages(formField)">
<label ng-message="required" class="label label-danger">{{formField.label}} required</label>
</div>
</div>
<button type="button" class="btn btn-default" data-ng-click="vm.onSubmitForm()">Submit</button>
</form>
</div>
</div>
JS:
var myApp = angular.module('myApp', ['ngMessages']);
myApp.controller('DynamicFormController', ['$scope', function($scope) {
var self = this;
$scope.formFields = [{
isMandatory: true,
formFieldId: 'UniqueField1',
value: null,
label: 'Email'
}, {
isMandatory: false,
formFieldId: 'UniqueField2',
value: null,
label: 'First Name'
}];
self.onSubmitForm = function() {
if (!$scope.myDynamicForm.$valid) {
console.error('form is invalid');
return;
}
};
self.onValidateMessages = function(formField) {
return $scope.$eval('myDynamicForm.' + formField.formFieldId + '.$error');
};
}]);