2
votes

Liste déroulante multi-sélection angulaire

Je voudrais concevoir une fonctionnalité de sélection multiple en angulaire en utilisant bootstrap 4. Voici l'image ci-dessous.

entrez la description de l'image ici

Voici mon implémentation à partir de maintenant.

             <div class="form-group">
                      <label>Employee privilege</label>
                      <select id="employeePrivelege" data-style="btn-default" 
                      class="selectpicker form-control" 
                      formControlName="employeePriveleges"
                      multiple data-max-options="2">      
                        <option selected>Mustard</option>
                        <option selected>Barbecue</option>
                          </select>
                    </div> 

J'ai 2 problèmes

  1. Un élément n'est pas sélectionné si j'ajoute l'attribut selected sur option

Je sais que cela se produit parce que je n'utilise pas jQuery et que je ne veux pas ajouter JQuery car ce n'est pas recommandé dans Angular.

Les questions que j'ai sont

  1. Quelle est l'option la plus simple pour implémenter un composant d'interface utilisateur à menu déroulant multiple dans Angular avec ou sans bootstrap 4


2 commentaires

Vous pouvez utiliser ce npmjs.com/package/ng-multiselect-dropdown


qu'entendez-vous par menu déroulant multiple? comme un menu imbriqué ou un arbre? s'il s'agit d'un arbre, vous pouvez essayer de regarder ce material.angular.io/components/tree/overview


3 Réponses :


2
votes

Si vous utilisez la conception matérielle, cela vous aidera. Définissez le contrôle de formulaire et mettez-y la valeur que vous souhaitez afficher sélectionnée puis définissez la liste déroulante comme ceci

<mat-select placeholder="Select Units" formControlName="unit">
                            <mat-option *ngFor="let unit ofUnit" [value]="unit.slug">
                              {{unit.unit_name}}
                            </mat-option>
                          </mat-select>


0 commentaires

1
votes

Ce codepen a une sélection multiple Bootstrap 4 très similaire à ce que vous montrez. lien . Quand j'ai ajouté select dans le premier tel que:

<select class="custom-select" id="basic" multiple="multiple">
   <option value="cheese" selected>Cheese</option>
   <option value="tomatoes">Tomatoes</option>
   <option value="mozarella">Mozzarella</option>
   <option value="mushrooms">Mushrooms</option>
   <option value="pepperoni">Pepperoni</option>
   <option value="onions">Onions</option>
</select>

Cela a fonctionné comme prévu.


0 commentaires

7
votes

J'ai essayé votre code mais l'attribut sélectionné fonctionne bien pour moi.

J'ai créé un extrait sur w3schools qui montre qu'il fonctionne: lien vers l'extrait

Il semble qu'il ne soit pas sélectionné car les options sélectionnées sont grisées car le contrôle est inactif. Si vous ajoutez une autre option mais qui n'est pas sélectionnée, vous pouvez voir la différence. J'ai créé un autre extrait de code ici .

Mon simplifié le code ressemble à ça:

<select name="Sauces" multiple>
  <option value="Mustard">Mustard</option>
  <option selected value="Barbecue">Barbecue</option>
  <option value="Ketchup">Ketchup</option>
  <option selected value="Mayonaise">Mayonaise</option>
</select>

J'ai également trouvé un composant angulaire qui fonctionne très bien:

https://www.npmjs.com/package/ng-multiselect-dropdown

J'ai créé un stackblitz démontrant le composant avec vos données ici

J'espère que cela vous aidera davantage. p>


4 commentaires

essayant d'utiliser votre démonstration stackblitz mais résultant en RROR TypeError: impossible de lire la propriété 'idField' d'undefined


Ici, cela fonctionne très bien sur différents ordinateurs. Quel navigateur utilisez-vous? Recevez-vous des erreurs dans les outils de développement dans l'onglet réseau ou dans la console javascript?


Merci pour votre aimable réponse. Utiliser Chrome et obtenir une erreur dans la console Javascript


Impressionnant. J'ai déjà essayé quelques bibliothèques pour la sélection multiple, mais ng-multiselect-dropdown convient bien mieux que d'autres.