Je voudrais créer un formulaire avec des champs créés dans la directive. La liaison des données des données fonctionnant correctement mais la validation ne fonctionne pas.
Ceci est HTML: P>
var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.data = {name: '', age: ''} $scope.config = [ {field: 'name', required:true}, {field: 'age'} ]; }); app.directive('field', function ($compile) { return { scope: { data: '=', conf: '=' }, link: function linkFn(scope, element, attrs) { // field container var row = angular.element('<div></div>'); // label row.append(scope.conf.field + ': '); // field input var field = angular.element('<input type="text" />'); field.attr('name', scope.conf.field); field.attr('ng-model', 'data.' + scope.conf.field); if (scope.conf.required) { field.attr('required', 'required'); } row.append(field); // validation if (scope.conf.required) { var required = angular.element('<span>required</span>'); required.attr('ng-show', 'form.' + scope.conf.field + '.$error.required'); row.append(required); } $compile(row)(scope); element.append(row); } } });
3 Réponses :
Vous devrez utiliser directive NG-Form et poussez la dynamique champ directement dans l'objet de formulaire. P>
Ce fil peut vous aider: https://github.com/angular/angular.js/issues/1404 p>
après: strong> p> p / s dans 'planker' pour les installations Ajouter CSS: strong> p> .ng-invalid {
border: 1px solid red;
}
Bien que hautement obscur, c'est en fait une réponse. Devrait être accepté dès que possible
Voici un plunker forcé de votre part pour résoudre votre problème: http://plnkr.co/edit/qompo-shirtmiznbndf?p=preview
à Résumez, j'ai ajouté une montre qui bascule le message d'erreur au lieu d'utiliser la directive NG-Show. Les choses peuvent devenir poilues lorsque vous essayez de ajouter de manière dynamique une directive dans un lien de directive. Pour un cas d'utilisation simple, il est plus rapide d'ajouter votre propre montre. P>
Vous pouvez également examiner cette directive préconfigurée pour gérer de nombreux cas d'utilisation pour validation et vous permettre de créer des validations personnalisées. facilement https://github.com/nelsonomuto/angular-u-form-validation p>
Je me lève avec le même problème. J'ai trouvé une fonctionnalité non documentée dans la source angulaire:
formontroller code> a des méthodes
$ addControl code> et
$ removecontrol code>. Je pense que vous devez appuyer sur ces méthodes pour ajouter de manière dynamique des contrôles au parent
formelController code> dans la directive. Vous fera savoir si je réussirai.