gpt4 book ai didi

javascript - AngularJS 对动态生成的输入指令的表单验证不适用于 ngForm

转载 作者:搜寻专家 更新时间:2023-11-01 05:11:30 28 4
gpt4 key购买 nike

我正在尝试验证使用指令生成的动态表单输入并隔离范围。在指令之外,我有主窗体,在 ng-repeat 内部,我尝试使用 ng-form,但它从未显示错误消息。最初我在 ng-repeat 上有 ng-form,但我认为这行不通,因为它超出了指令的范围,所以将它放在指令的父 div 上,但仍然没有显示对无效电子邮件的验证.

带有 ng-repeat 和字段指令的表单

<form name="mainForm" 
role="form"
ng-controller="WizardFormController as wizFormCtrl"
ng-submit="submit( mainForm.$valid )"
novalidate>

<div ng-repeat="field in panel.form_fields">

<form-field field="field"
model="models[field.field_name]" ng-form="subForm">
</form-field>

</div>

<div class="form-group clearfix">
<button class="btn btn-primary pull-right"
ng-click="update( models )"
ng-disabled="mainForm.$invalid">Save Progress</button>

</div>

</form>

表单字段指令

<div class="form-group" ng-form="subForm">

<label for="{{field.field_name}}">{{field.field_label}}</label>

<input type="text"
class="form-control"
id="{{field.field_id}}"
name="{{field.field_name}}"
ng-model="model">

<div ng-show="subForm[field.field_name].$dirty &&
subForm[field.field_name].$invalid">Invalid:

<span ng-show="subForm[field.field_name].$error.email">This is not a valid email.</span>
</div>

</div>

看起来应该可以查看生成的标记,表明该字段是 ng-valid:

<div class="form-group ng-scope ng-dirty ng-valid-required ng-valid ng-valid-email" 
ng-form="subForm">

这就是我访问子表单的方式吗:

subForm[field.field_name].$dirty

更新我找到了解决此问题的方法并在下面进行了回答,请参阅 here

最佳答案

这个问题的解决方案显然正在开发中,并且已经存在 2 年多了。在 GitHub 上投上您的一票!可以找到最容易实现的解决方案,也可以说是最好的解决方案 here感谢Thinkscape , 我已经在下面复制了它。

  angular.module('interpol', [])

.config(function($provide) {

$provide.decorator('ngModelDirective', function($delegate) {
var ngModel = $delegate[0], controller = ngModel.controller;
ngModel.controller = ['$scope', '$element', '$attrs', '$injector', function(scope, element, attrs, $injector) {
var $interpolate = $injector.get('$interpolate');
attrs.$set('name', $interpolate(attrs.name || '')(scope));
$injector.invoke(controller, this, {
'$scope': scope,
'$element': element,
'$attrs': attrs
});
}];
return $delegate;
});

$provide.decorator('formDirective', function($delegate) {
var form = $delegate[0], controller = form.controller;
form.controller = ['$scope', '$element', '$attrs', '$injector', function(scope, element, attrs, $injector) {
var $interpolate = $injector.get('$interpolate');
attrs.$set('name', $interpolate(attrs.name || attrs.ngForm || '')(scope));
$injector.invoke(controller, this, {
'$scope': scope,
'$element': element,
'$attrs': attrs
});
}];
return $delegate;
});
})

.run(function($rootScope) {
$rootScope.models = [{
value: 'foo'
},{
value: 'bar'
},{
value: 'baz'
}];
});

我只是将其放入,并将其标记为依赖项,并且我问题中的表单有效。

干杯

关于javascript - AngularJS 对动态生成的输入指令的表单验证不适用于 ngForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com