2017-02-27 1 views
1

Je souhaite réutiliser mon composant sur la même page, mais j'ai le problème de définir la valeur de mes boutons radio en fonction de celle sur laquelle je travaille.Composant RadioButton partagé dans Angular2

J'ai trois composants partagés et je ne sais pas comment le faire pour les différencier. Je veux dire, si je travaille sur le premier, je ne veux pas que les deux autres composants soient modifiés. J'ai résolu en utilisant un mode "drastique", et je voudrais le faire mieux. Toute suggestion serait appréciée.

Voici mon code html:

<div class="ui form"> 
    <div class="inline fields"> 
    <label for="fruit">Send to:</label> 
    <div class="field"> 
     <div class="ui radio checkbox"> 
     <input type="radio" name="radio{{A}}{{B}}" value="selected" [(ngModel)]="option"> 
     <label>Send Selected</label> 
     </div> 
    </div> 
    <div class="field"> 
     <div class="ui radio checkbox"> 
     <input type="radio" name="radio{{A}}{{B}}" value="all" [(ngModel)]="option"> 
     <label>Send All</label> 
     </div> 
    </div> 
    </div> 
</div> 

La façon dont je fais est de déclarer la valeur A et B, qui sont booléens, mais je pense est une mauvaise façon de le résoudre.

Les variables de ses composants sont:

@Input() A: boolean; 
@Input() B: boolean; 
@Input() C: boolean; 
private option: string = 'selected'; 

est-il une méthode pour améliorer cette solution? :

name="radio{{A}}{{B}}" 
+0

avez-vous défini une entrée pour votre composant? Si vous partagez votre composant et souhaitez faire la différence lorsque vous utilisez votre composant partagé, vous devez définir certaines entrées pour le rendre différent. Comme vous voulez un nom de composant différent, vous devez définir une entrée pour le nom et lier l'entrée à la vue. –

+0

Je ne vous comprends pas, parce que j'ai un composant unique qui est partagé 3 fois, donc je ne peux pas leur définir un "id". J'ai fait l'entrée aux variables booléens. – XGuy

+1

pourriez-vous montrer votre code du composant unique et l'utilisation de votre composant? –

Répondre

1

Il est un peu clair dans quel but A, B et C servent, mais en utilisant seulement deux booléens limiterait sévèrement la quantité de cas possibles uniques que vous pouvez utiliser.

Quoiqu'il en soit, je ferais une des opérations suivantes:

  • Créer un service pour générer name uniques s pour chaque instance du composant que le composant fera appel à OnInit, et magasin pour le reste de sa durée de vie (que bien sûr vous pourriez recycler OnDestroy).

  • Ajoutez un autre @Input pour le nom du groupe radio et laissez le consommateur du composant décider du nom du groupe.

MISE À JOUR:

Je viens de remarquer que vous ne devez pas utiliser l'attribut name=, vous pouvez l'omettre, les groupes angulaire automatiquement entrées radio quand ils sont liés à l'aide [(ngModel)] à la même « chose ".

+0

Je pense que l'affiche se heurte à la question des groupes de boutons radio de différents composants partagés partageant le même état s'ils ont le même nom. Comment omettre le nom empêche-t-il cela? – RMuesi