使用 ng-messages 对生成的字段进行表单验证
Form validation on generated fields with ng-messages
我花了一天的时间摆弄表单验证,以便在生成的字段上使用新的 ng-messages,但没有成功。我阅读了 angular 文档和 github 问题 ng-repeat 不受 ng-messages 支持,因为它不插入其字段。所以,我决定走 jquery 路线构建 dom 自己编译它并用我生成的代码替换元素,当然我也没有开始工作。所以一些帮助将不胜感激。这是我的 html:
....
<app-field ng-repeat="field in fields" field="field" ng-model="selected[field.name]" form="form" type="input"></app-field>
<fieldset class="form-group">
<label for="field1s">static field 1</label>
<input name="field1s" type="text" ng-model="selected['field1']" class="form-control" required="">
<ng-messages for="form['field1'].$error">
<ng-message when="required">Is required</ng-message>
</ng-messages>
<label for="field2s">static field 2</label>
<input name="field2s" type="text" ng-model="selected.field2" class="form-control" required="" ng-maxlength="10" ng-minlength="2">
<ng-messages for="form.field2s.$error">
<ng-message when="required">Is required</ng-message>
<ng-message when="maxlength">Max length 10</ng-message>
<ng-message when="minlength">MIn length 2</ng-message>
</ng-messages>
</fieldset>
我也添加了一些静态类型的字段,这样我就可以监视数据源和表单。指令 app-field 生成 dom ,它是用一些 jquery 汤煮熟的,但结果证明效果很好。我的意思是生成的 dom 看起来像它应该的但是......但是编译它不同意 angular,angular 不会抛出任何错误但它只是拒绝绑定动态字段到表单正确。它更新底层对象但不进行表单验证,更不用说触发 ng-messages 并根据此 post: Angularjs: Form validation on input field generated by directive I see no reason why it shouldn't. Here's a plunk: http://plnkr.co/edit/ZzC4jS9M9Ev5i6gxUVxB?p=preview
感谢任何帮助...
您需要在每个 ng-repeat 中包含 ng-form 元素,动态字段验证才能工作。我已经解决了字段 1 下面的 plunker 中的问题。
http://plnkr.co/edit/xQTLDa3TptXky8KIcSsh?p=preview
<form name="form">
<ng-form name="myform">
<input name="field1s" type="text" ng-model="selected['field1']" class="form-control" ng-required="true" ng-pattern="/^[0-9a-zA-Z]+$/">
<ng-messages for="form.myform['field1s'].$error">
<ng-message when="required">Is required</ng-message>
<ng-message when="pattern">alpha error </ng-message>
</ng-messages>
</ng-form>
</form>
我已经注释掉了您编写的自定义 JQuery 代码。因为不再需要它了。
请参阅此 - https://github.com/angular/angular.js/issues/10165 了解更多信息。关于这个问题。
我花了一天的时间摆弄表单验证,以便在生成的字段上使用新的 ng-messages,但没有成功。我阅读了 angular 文档和 github 问题 ng-repeat 不受 ng-messages 支持,因为它不插入其字段。所以,我决定走 jquery 路线构建 dom 自己编译它并用我生成的代码替换元素,当然我也没有开始工作。所以一些帮助将不胜感激。这是我的 html:
....
<app-field ng-repeat="field in fields" field="field" ng-model="selected[field.name]" form="form" type="input"></app-field>
<fieldset class="form-group">
<label for="field1s">static field 1</label>
<input name="field1s" type="text" ng-model="selected['field1']" class="form-control" required="">
<ng-messages for="form['field1'].$error">
<ng-message when="required">Is required</ng-message>
</ng-messages>
<label for="field2s">static field 2</label>
<input name="field2s" type="text" ng-model="selected.field2" class="form-control" required="" ng-maxlength="10" ng-minlength="2">
<ng-messages for="form.field2s.$error">
<ng-message when="required">Is required</ng-message>
<ng-message when="maxlength">Max length 10</ng-message>
<ng-message when="minlength">MIn length 2</ng-message>
</ng-messages>
</fieldset>
我也添加了一些静态类型的字段,这样我就可以监视数据源和表单。指令 app-field 生成 dom ,它是用一些 jquery 汤煮熟的,但结果证明效果很好。我的意思是生成的 dom 看起来像它应该的但是......但是编译它不同意 angular,angular 不会抛出任何错误但它只是拒绝绑定动态字段到表单正确。它更新底层对象但不进行表单验证,更不用说触发 ng-messages 并根据此 post: Angularjs: Form validation on input field generated by directive I see no reason why it shouldn't. Here's a plunk: http://plnkr.co/edit/ZzC4jS9M9Ev5i6gxUVxB?p=preview
感谢任何帮助...
您需要在每个 ng-repeat 中包含 ng-form 元素,动态字段验证才能工作。我已经解决了字段 1 下面的 plunker 中的问题。 http://plnkr.co/edit/xQTLDa3TptXky8KIcSsh?p=preview
<form name="form">
<ng-form name="myform">
<input name="field1s" type="text" ng-model="selected['field1']" class="form-control" ng-required="true" ng-pattern="/^[0-9a-zA-Z]+$/">
<ng-messages for="form.myform['field1s'].$error">
<ng-message when="required">Is required</ng-message>
<ng-message when="pattern">alpha error </ng-message>
</ng-messages>
</ng-form>
</form>
我已经注释掉了您编写的自定义 JQuery 代码。因为不再需要它了。
请参阅此 - https://github.com/angular/angular.js/issues/10165 了解更多信息。关于这个问题。