C'est possible et voici comment je fais la même chose avec un tableau d'entrées.
envelopper la table dans une forme comme celle-ci
Alors utilisez simplement ceci
J'ai un formulaire avec des directives multi-imbriquées qui contiennent toutes des entrées, des sélections, etc. Ces éléments sont tous entourés de ng-repeats et de valeurs de chaîne dynamiques.
Voici comment utiliser la directive:
<form name="myFormName">
<nested directives of many levels>
<your table here>
<perhaps a td here>
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 + index + '/' + 'myFormName' }}"
</select>
</form>
Remarque: vous pouvez ajouter et indexer la concaténation de chaînes si vous avez besoin de sérialiser peut-être une table d'entrées; c'est ce que j'ai fait.
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
}
});
Cela devrait gérer de nombreuses situations où vous ne savez tout simplement pas où le formulaire sera. Ou peut-être avez-vous des formulaires imbriqués, mais pour une raison quelconque, vous souhaitez attacher ce nom d'entrée à deux formulaires? Eh bien, transmettez simplement le nom du formulaire auquel vous souhaitez attacher le nom d'entrée.
Ce que je voulais, c'était un moyen d'attribuer des valeurs dynamiques à des entrées que je ne saurais jamais, puis d'appeler simplement $ scope.myFormName. $ Valid.
Vous pouvez ajouter tout ce que vous souhaitez: plus de tables, plus d'entrées de formulaire, des formulaires imbriqués, tout ce que vous voulez. Passez simplement le nom du formulaire sur lequel vous souhaitez valider les entrées. Ensuite, lors de l'envoi du formulaire, demandez si le $ scope.yourFormName. $ Valid