[英]AngularJS dynamic form field validation
我正在嘗試驗證從后端端點給我的一些表單字段...
所以基本上input
元素是在ng-repeat
中動態創建的。 因此, input
屬性也會動態添加,例如type
, name
等......
但是因為name
屬性是動態添加的,所以當我嘗試驗證它時,例如:
myForm.elName.$valid
它不會返回任何內容,因為此時它不知道elName
是什么。
我創建了一個jsFiddle來演示這個問題: http : //jsfiddle.net/peduarte/HB7LU/1889/
任何幫助或建議將不勝感激!
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>
問題解釋:
默認情況下,輸入元素使用ngModelController( ng-model
)調用FormController.$addControl
當它們被鏈接到注冊本身並在FormController
使用輸入的name屬性公開屬性,在這種情況下為{{ field.name }}
。 因此,即使注冊了控件但在FormController
使用命名email
firstName
公開屬性,也只有{{ field.name }}
引用最后一個輸入項
解決方案的解釋:
在此解決方案中,我創建了一個自定義指令,以便在運行時將{{ field.name }}
替換為正確的名稱。
有關為什么我必須使用terminal:true,
和priority:1000
更多信息,請查看此討論: 在AngularJS中添加指令中的指令
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.