Comment ajouter et supprimer dynamiquement des champs de formulaire dans Angulaire 2
Je suis en train d'ajouter des champs de saisie de façon dynamique lorsque l'utilisateur clique sur le bouton ajouter et pour chaque champ de formulaire, il doit y avoir un bouton supprimer, lorsque l'utilisateur clique sur le champs de formulaire doit être retiré, j'ai besoin d'obtenir cette aide Angulaire 2, comme je suis nouveau sur Angulaire 2 merci de m'aider à le compléter
Ce que j'ai essayé
J'ai créé un ensemble de champs (3 sélectionnez la boîte et 1 zone de texte), créé un bouton appelé ajouter des champs, mais je l'ai essayé dans angulaire 1.x sa fonctionne bien mais angulaire 2 je ne sais pas comment la réaliser, c'est lien de mon travail à plein
app/app.component.ts
import {
Component
}
from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<div class="container">
<button class="btn btn-success bt-sm">add</button>
<form role="form" calss="form-inline">
<div class="form-group col-xs-3">
<label>Select State:</label>
<select class="form-control" [(ngModel)]="rules.State" id="sel1">
<option>State1</option>
<option>State2</option>
<option>State3</option>
<option>State4</option>
</select>
</div>
<div class="form-group col-xs-3">
<label>Rule:</label>
<input type="text" data-toggle="modal" data-target="#myModal" class="form- control">
</div>
<div class="form-group col-xs-3">
<label>Pass State :</label>
<select class="form-control" [(ngModel)]="rules.pass">
<option>State1</option>
<option>State2</option>
<option>State3</option>
<option>State4</option>
</select>
</div>
<div class="form-group col-xs-3">
<label>Fail State:</label>
<select class="form-control" [(ngModel)]="rules.fail">
<option>State1</option>
<option>State2</option>
<option>State3</option>
<option>State4</option>
</select>
</div>
</form>
</div>
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">× </button>
<h4 class="modal-title">Rules Configuration</h4>
</div>
<div class="modal-body">
<p>Rules</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data- dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
`
})
export class AppComponent {
title = 'Rule Engine Demo';
rules: Rules = {
State: '',
pass: '',
fail: ''
};
- Vous pouvez utiliser
ControlGroup
pour atteindre cet stackoverflow.com/questions/36627573/... - avez-vous une idée pourquoi angulaire 2 en ne chargeant pas le modèle html de script interne des codes
- voulez-vous dire l'injection de scripts à l'aide de
[innerHTML]
ne fonctionne pas ? C'est parce angulaire de ne pas autoriser les scripts à être injecté de cette façon - pas les balises de script, vous avez utilisé jquery générateur de requêtes jamais ?..
query builder
? Pas de. mais il se passe aussi en raison angulaire n'autorise pas tous les scripts dans des modèles. voir ce problème- alors où je peux charger les balises de script, si je charge dans index.html obtiens une erreur comme type non défini, si j'ai besoin d'utiliser le script à l'intérieur du modèle de toute idée ont u
Vous devez vous connecter pour publier un commentaire.
C'est quelques mois de retard, mais j'ai pensé que je voudrais vous donner ma solution basée sur ce tutoriel ici. L'essentiel, c'est que c'est beaucoup plus facile à gérer, une fois que vous changez la façon dont vous vous approchez de formes.
Tout d'abord, utilisez
ReactiveFormsModule
au lieu de ou en plus de la normaleFormsModule
. Avec des formes réactives de vous créer vos formulaires dans vos composants/services, puis branchez-le dans votre page au lieu de votre page de génération de la forme elle-même. C'est un peu plus de code, mais c'est beaucoup plus testable, beaucoup plus souple, et aussi loin que je peux dire que le meilleur moyen de faire beaucoup de non-trivial formes.Le résultat final ressemble un peu à ce, sur le plan conceptuel:
Vous avez une base de
FormGroup
avec tout ceFormControl
cas vous avez besoin pour l'ensemble de la forme. Par exemple, comme dans le tutoriel, je l'ai lié à la, permet de dire que vous voulez un formulaire où l'utilisateur peut entrer son nom une fois et ensuite n'importe quel nombre d'adresses. Tous d'un champ d'entrée serait dans ce formulaire de base du groupe.À l'intérieur que
FormGroup
exemple, il y aura un ou plusieursFormArray
instances. UnFormArray
est essentiellement un moyen de regrouper plusieurs commandes en et itérer sur eux. Vous pouvez aussi mettre plusieursFormGroup
des instances de votre tableau et de les utiliser comme essentiellement "mini-formes" imbriquée à l'intérieur de votre plus grande forme.Par l'imbrication de plusieurs
FormGroup
et/ouFormControl
occurrences au sein d'une dynamiqueFormArray
, vous pouvez contrôler la validité et de gérer la forme comme une grande, réactif pièce composée de plusieurs parties dynamiques. Par exemple, si vous voulez vérifier si chaque entrée est valide avant de permettre à l'utilisateur de soumettre la validité d'un sous-formulaire "bubble up" pour le formulaire de premier niveau et la forme entière devient invalide, le rendant facile à gérer les entrées dynamiques.Comme un
FormArray
est, essentiellement, un wrapper autour d'un tableau de l'interface, mais pour former des morceaux, vous pouvez push, pop, insérer et supprimer des contrôles à tout moment sans avoir à recréer le formulaire ou en faisant des interactions complexes.Dans le cas où le tutoriel je lien va vers le bas, voici quelques exemples de code que vous pouvez appliquer vous-même (mes exemples d'utilisation de la Machine) qui illustrent les idées de base:
Composant de Base code:
Sous-Composante de Code: (une pour chaque nouveau champ de saisie, pour garder les choses propres)
Composant de Base HTML
Sous-Composant HTML
Dans le code ci-dessus en gros, j'ai un composant qui représente la base de la forme, puis chaque sous-composant gère son propre
FormGroup
instance au sein de l'FormArray
situé à l'intérieur de la baseFormGroup
. Le modèle de base, qui parcourt le sous-groupe chargé de la sous-composante et puis vous pouvez gérer la validation de la totalité du formulaire dynamiquement.Aussi, il est trivial de re-composante de l'ordre par stratégiquement l'insertion et le retrait de la forme. Il fonctionne avec (presque) n'importe quel nombre d'entrées qu'ils n'entrent pas en conflit avec des noms (un gros inconvénient du modèle axé sur les formes autant que je suis au courant) et vous conservez toujours assez bien de validation automatique. Le seul "inconvénient" de cette approche est d'ailleurs écrit un peu plus de code, vous ne avoir à réapprendre les formes de travail. Toutefois, cela ouvre des possibilités beaucoup plus grandes et des formes plus dynamiques que vous allez sur.
Si vous avez des questions ou souhaitez signaler quelques erreurs, aller de l'avant. J'ai juste tapé le code ci-dessus de quelque chose que j'ai fait moi-même la semaine dernière avec les noms ont été changés et d'autres divers. propriétés de gauche, mais il devrait être très simple. La seule différence majeure entre le code ci-dessus, et de mes propres c'est que j'ai passé tous de la forme-construction d'un service séparé, qui est appelé à partir du composant c'est donc un peu moins salissant.
addAccordian(type de données) {
console.log(type de données);
}