J'essaye d'activer / désactiver un bouton dans Angular 9 lorsqu'aucune liste déroulante n'est sélectionnée.
dashboard.html.ts:
<div class="form-group">
<label for="inputCollaborateur">Collaborateur</label>
<select class="form-control" [(ngModel)]="edit.collaborateur" id="inputCollaborateur" name="inputCollaborateur" required>
<option *ngFor='let collaborateur of collaborateurs' [ngValue]="collaborateur">{{collaborateur.matricule}} - {{collaborateur.nom}} {{collaborateur.prenom}}</option>
</select>
</div>
<button type="button" class="btn btn-primary" (click)="enregistrerCreation()">Ajouter</button>
J'ai essayé en utilisant ceci dans le code du bouton ng-disabled = "! edit.collaborateur mais cela ne fonctionne pas ...
4 Réponses :
Veuillez essayer:
<button type="button" class="btn btn-primary" [disabled]="!edit.collaborateur" (click)="enregistrerCreation()">Ajouter</button>
Cela fonctionne-t-il pour vous?
Ajoutez une variable de référence de modèle sur l'élément select et affectez ngControl comme suit. Utilisez ensuite la variable de référence du modèle pour vérifier la validation de l'entrée.
<div class="form-group">
<label for="inputCollaborateur">Collaborateur</label>
<select class="form-control" [(ngModel)]="edit.collaborateur" id="inputCollaborateur" name="inputCollaborateur" required #collaboreurRef="ngModel">
<option *ngFor='let collaborateur of collaborateurs' [ngValue]="collaborateur">{{collaborateur.matricule}} - {{collaborateur.nom}} {{collaborateur.prenom}}</option>
</select>
</div>
<button type="button" class="btn btn-primary" [disabled]="collaboreurRef.invalid" (click)="enregistrerCreation()" >Ajouter</button>
ça ne marche pas, ça ne désactive pas le bouton ...
Je voudrais mais compliqué avec tout ce que j'ai dans les fichiers et le code que j'ai dans les fichiers et je n'en ai jamais créé un ....
J'ai essayé dans ce stackblitz que cela fonctionne bien: stackblitz.com/ modifier /…
stackblitz.com/edit/angular-ivy-61bahu voici le mien mais de nombreuses erreurs sont dues à la librairie
cela fonctionne avec vous parce que vous mettez une fonction compareFn. si je le supprime, cela ne fonctionne pas.
Il est recommandé d'avoir une fonction de comparaison si vous utilisez l'attribution d'objet à l'attribut value, angular.io / api / forms /…
ok, j'ai fait la même chose mais toujours en activant le bouton
continuons cette discussion dans le chat .
je pense que c'est parce que vous n'avez pas de données dynamiques. mon '[(ngModel)] = "edit.collaborateur"' et '[ngValue] = "collaborateur"' alors comment puis-je le faire correspondre avec votre pays2 dans votre exemple?
Essayez ceci:
<button type="button" class="btn btn-primary" [disabled]="(!edit.collaborateur || edit.collaborateur === '' )" (click)="enregistrerCreation()">Ajouter</button>
Ou vous pouvez essayer de vérifier les données avec (ngModelChange) = "onChange ($ event)" en html, puis vérifier l'activation / la désactivation dans le fichier TS
avez-vous un exemple pour le '(ngModelChange) = "onChange ($ event)'?
Je pense que vous avez un problème ailleurs dans le code parce que l'une de ces méthodes devait fonctionner. Avez-vous un exemple de ces codes?
Essayez ceci aussi [disabled] = "(collaboreurRef.invalid ||! Edit.collaborateur || edit.collaborateur === '')" Sinon, vous devriez revoir votre code si toutes les données arrivent correctement. Bonne chance!
Je suggérerais simplement de cocher la case pour sélectionner la balise. Vous pouvez utiliser le gestionnaire d'événement de modification pour ce cas.
disabled:boolean = true;
ngOnInit() {
check_for_disable();
}
check_for_disable() {
if(this.edit?.collaborateur !== "") this.disabled = false;
}
fonction dans le fichier ts
<div class="form-group">
<label for="inputCollaborateur">Collaborateur</label>
<select class="form-control" [(ngModel)]="edit.collaborateur" id="inputCollaborateur" name="inputCollaborateur" (change)="check_for_disable()" required>
<option *ngFor='let collaborateur of collaborateurs' [ngValue]="collaborateur">{{collaborateur.matricule}} - {{collaborateur.nom}} {{collaborateur.prenom}}</option>
</select>
</div>
<button type="button" class="btn btn-primary" (click)="enregistrerCreation()" [disabled]="disabled">Ajouter</button>
Par "non sélectionné", voulez-vous dire que la liste déroulante affiche la première valeur de
collaborateurs?