我無法找到滿足部分或全部這些需求的答案。這是我想出的。
可能有更好的方法,請分享您的想法。
我使用Angularjs 1.3.0-beta.8
我與多嵌套指令,所有包含輸入(S)形式,選擇(一個或多個),等... 這些元件都包含在ng-repeats和動態字符串值。
這是如何使用的指令:
<form name="myFormName">
<nested directives of many levels>
ex: <input ng-repeat=(index, variable) in variables" type="text"
my-name="{{ variable.name + '/' + 'myFormName' }}"
ng-model="variable.name" required />
ex: <select ng-model="variable.name" ng-options="label in label in {{ variable.options }}"
my-name="{{ variable.name + '/' + 'myFormName' }}"
</select>
</form>
注意:你可以,如果你需要或許序列化的輸入表中添加和指數的字符串連接;這就是我所做的。但是,動態名稱輸入意味着您可能不知道表單輸入的名稱,那麼您將如何調用$ scope.formName。??????。您可以迭代$ scope.formName對象以獲得匹配特定值的鍵。這意味着字符串連接這樣的:
my-name="{{ dynamicString + hello + '/' + 'myFormName' }}"
然後在$ scope.myFormName則可以通過將只是遍歷對象和收集,包括「你好」的任何鍵找到任何形式的輸入名稱。
app.directive('myName', function(){
var myNameError = "myName directive error: "
return {
restrict:'A', // Declares an Attributes Directive.
require: 'ngModel', // ngModelController.
link: function(scope, elem, attrs, ngModel){
if(!ngModel){ return } // no ngModel exists for this element
// check myName input for proper formatting ex. something/something
checkInputFormat(attrs);
var inputName = attrs.myName.match('^\\w+').pop(); // match upto '/'
assignInputNameToInputModel(inputName, ngModel);
var formName = attrs.myName.match('\\w+$').pop(); // match after '/'
findForm(formName, ngModel, scope);
} // end link
} // end return
function checkInputFormat(attrs){
if(!/\w\/\w/.test(attrs.rsName)){
throw myNameError + "Formatting should be \"inputName/formName\" but is " + attrs.rsName
}
}
function assignInputNameToInputModel(inputName, ngModel){
ngModel.$name = inputName
}
function addInputNameToForm(formName, ngModel, scope){
scope[formName][ngModel.$name] = ngModel; return
}
function findForm(formName, ngModel, scope){
if(!scope){ // ran out of scope before finding scope[formName]
throw myNameError + "<Form> element named " + formName + " could not be found."
}
if(formName in scope){ // found scope[formName]
addInputNameToForm(formName, ngModel, scope)
return
}
findForm(formName, ngModel, scope.$parent) // recursively search through $parent scopes
}
});
這應該處理很多情況下,你只是不知道窗體將在哪裏。或者您可能嵌套了表單,但出於某種原因,您希望將此輸入名稱附加到兩個表單中?那麼,只需傳入您想要附加輸入名稱的表單名稱即可。
我想要的是一種將動態值分配給我永遠不會知道的輸入的方法,然後調用$ scope.myFormName。$ valid。
這可能是一個矯枉過正的問題,1.3+中存在更好的解決方案。我無法在我的時間找到它。這現在適合我。
祝你好運!希望這可以幫助別人!
http://stackoverflow.com/questions/21455695/angularjs-dynamic-form-field-validation/21457121#21457121 – 2015-06-06 04:29:09