AngularJSdynamic表单字段validation
我想validation从后端端点给我的一些表单域…
所以基本上, input
元素是在ng-repeat
内dynamic创build的。 因此, input
属性也是dynamic添加的,例如type
, name
等等。
但是,因为name
属性是dynamic添加的,所以当我尝试validation它时,像这样,例如:
myForm.elName.$valid
它不返回任何东西,因为在这一点上,它不知道elName
是什么。
我创build了一个jsFiddle来演示这个问题: http : //jsfiddle.net/peduarte/HB7LU/1889/
任何帮助或build议将不胜感激!
FANX。
编辑:
我一直在引用这个AWESOME文档: http ://docs.angularjs.org/api/ng.directive: input.email
试试我的自定义指令:
myApp.directive("dynamicName",function($compile){ return { restrict:"A", terminal:true, priority:1000, link:function(scope,element,attrs){ element.attr('name', scope.$eval(attrs.dynamicName)); element.removeAttr("dynamic-name"); $compile(element)(scope); } }; });
用它:
<input dynamic-name="field.name" type="{{ field.type }}" placeholder="{{ field.name }}" ng-model="field.value" required>
DEMO
问题的解释:
默认情况下,使用ngModelController( ng-model
)的input元素调用FormController.$addControl
来注册自己,并在FormController
上公开一个属性为{{ field.name }}
的input的name属性 。 因此,即使控件已注册,但是您没有在具有指定email
FormController
上显示属性firstName
,您只有{{ field.name }}
引用上一个input项
解决scheme的解释:
在这个解决scheme中,我创build了一个自定义指令,以便在运行时用正确的名称replace{{ field.name }}
。
有关更多信息,为什么我必须使用terminal:true,
和priority:1000
,请查看此讨论: 在AngularJS中添加指令