J'ai quelques cases à cocher:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
Que je voudrais lier à une liste dans mon contrôleur de sorte que chaque fois qu'une case à cocher est modifiée, le contrôleur conserve une liste de toutes les valeurs vérifiées, par exemple ['apple', 'pear']
,.
ng-model ne semble pouvoir lier que la valeur d'une seule case à cocher à une variable du contrôleur.
Y a-t-il une autre façon de le faire pour que je puisse lier les quatre cases à cocher à une liste dans le contrôleur?
javascript
angularjs
nickponline
la source
la source
<input type='checkbox' ng-model="checkboxes.apple">
, etc. Le modèle serait: {"apple": true, "orange": false, "pear": true, "naartjie": true}naartjie
!? Cela vous donne juste un coup de pouce! : DRéponses:
Il existe deux façons d'aborder ce problème. Utilisez un simple tableau ou un tableau d'objets. Chaque solution a ses avantages et ses inconvénients. Vous trouverez ci-dessous un pour chaque cas.
Avec un tableau simple comme données d'entrée
Le HTML pourrait ressembler à:
Et le code de contrôleur approprié serait:
Avantages : La structure de données simple et le basculement par nom sont faciles à gérer
Inconvénients : l'ajout / la suppression est fastidieux car deux listes (l'entrée et la sélection) doivent être gérées
Avec un tableau d'objets comme données d'entrée
Le HTML pourrait ressembler à:
Et le code de contrôleur approprié serait:
Avantages : ajouter / supprimer est très facile
Inconvénients : structure de données un peu plus complexe et basculement par nom est lourd ou nécessite une méthode d'assistance
Démo : http://jsbin.com/ImAqUC/1/
la source
value="{{fruit.name}}"
etng-checked="fruit.checked"
sont superflus, car le modèle ng est utilisé.Une solution simple:
http://plnkr.co/edit/U4VD61?p=preview
la source
(color,enabled) in colors
?colors
c'est un objet, quand vous l'itérez - vous obtenez des paires de(key,value)
.colors
devrait être nomméisSelected
, il est beaucoup plus facile à lireisSelected[color]
quecolors[color]
.
la source
Voici une petite directive réutilisable rapide qui semble faire ce que vous cherchez à faire. Je l'ai simplement appelé
checkList
. Il met à jour le tableau lorsque les cases à cocher changent et met à jour les cases à cocher lorsque le tableau change.Voici un contrôleur et une vue qui montrent comment vous pouvez vous en servir.
(Les boutons montrent que la modification de la matrice mettra également à jour les cases à cocher.)
Enfin, voici un exemple de la directive en action sur Plunker: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview
la source
value: '@'
parvalue: '=ngValue'
Sur la base des réponses dans ce fil, j'ai créé une directive de modèle de liste de contrôle qui couvre tous les cas:
Pour le cas du sujet, ce serait:
la source
selectedFruits
.L'utilisation d'une chaîne de
$index
peut aider à utiliser une table de hachage des valeurs sélectionnées:De cette façon, l'objet ng-model est mis à jour avec la clé représentant l'index.
Après un certain temps
$scope.someObject
devrait ressembler à quelque chose comme:Cette méthode ne fonctionnera pas dans toutes les situations, mais elle est facile à mettre en œuvre.
la source
Puisque vous avez accepté une réponse dans laquelle aucune liste n'a été utilisée, je suppose que la réponse à ma question de commentaire est "Non, il ne doit pas nécessairement s'agir d'une liste". J'ai également eu l'impression que peut-être vous rendiez le côté serveur HTML, car "vérifié" est présent dans votre exemple HTML (cela ne serait pas nécessaire si ng-model était utilisé pour modéliser vos cases à cocher).
Quoi qu'il en soit, voici ce que j'avais à l'esprit lorsque j'ai posé la question, en supposant également que vous génériez le côté serveur HTML:
ng-init permet au HTML généré côté serveur de définir initialement certaines cases à cocher.
Violon .
la source
Je pense que la solution de contournement la plus simple serait d'utiliser 'select' avec 'multiple' spécifié:
Sinon, je pense que vous devrez traiter la liste pour construire la liste (en
$watch()
combinant la liaison du tableau de modèles avec des cases à cocher).la source
J'ai adapté la réponse acceptée de Yoshi pour traiter des objets complexes (au lieu des chaînes).
HTML
Javascript
Exemple de travail: http://jsfiddle.net/tCU8v/
la source
<input type="checkbox">
sans emballage ou assorti<label>
! Maintenant, vos utilisateurs doivent cliquer sur la case à cocher réelle au lieu du texte à côté de la case à cocher, ce qui est beaucoup plus difficile et est une mauvaise utilisation.Une autre directive simple pourrait être comme:
Le controlle:
Et le HTML:
J'inclus également un Plunker: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview
la source
La solution suivante semble être une bonne option,
Et dans le modèle du contrôleur, la valeur
fruits
sera comme cecila source
Vous n'avez pas besoin d'écrire tout ce code. AngularJS gardera le modèle et les cases à cocher synchronisés simplement en utilisant ngTrueValue et ngFalseValue
Codepen ici: http://codepen.io/paulbhartzog/pen/kBhzn
Extrait de code:
la source
Découvrez cette directive qui gère efficacement les listes de cases à cocher. J'espère que ça marche pour vous. Modèle CheckList
la source
Il existe un moyen de travailler directement sur le tableau et d'utiliser simultanément ng-model via
ng-model-options="{ getterSetter: true }"
.L'astuce consiste à utiliser une fonction getter / setter dans votre modèle ng. De cette façon, vous pouvez utiliser un tableau comme modèle réel et «simuler» les booléens dans le modèle d'entrée:
CAVEAT Vous ne devez pas utiliser cette méthode si vos tableaux sont volumineux, comme
myGetterSetter
on l'appellera souvent.Pour plus d'informations à ce sujet, voir https://docs.angularjs.org/api/ng/directive/ngModelOptions .
la source
J'aime la réponse de Yoshi. Je l'ai amélioré pour que vous puissiez utiliser la même fonction pour plusieurs listes.
http://plnkr.co/edit/KcbtzEyNMA8s1X7Hja8p?p=preview
la source
Si vous avez plusieurs cases à cocher sur le même formulaire
Le code du contrôleur
Afficher le code
la source
Inspiré du post de Yoshi ci-dessus. Voici le plnkr .
la source
Sur la base de mon autre article ici , j'ai créé une directive réutilisable.
Découvrez le référentiel GitHub
la source
Dans le code HTML (en supposant que les cases à cocher se trouvent dans la première colonne de chaque ligne d'un tableau).
Dans le
controllers.js
dossier:la source
Voici encore une autre solution. L'avantage de ma solution:
Voici la directive:
À la fin, utilisez-le simplement comme ceci:
Et c'est tout ce qu'il y a. Le seul ajout est l'
checkbox-array-set
attribut.la source
Vous pouvez combiner AngularJS et jQuery. Par exemple, vous devez définir un tableau,,
$scope.selected = [];
dans le contrôleur.Vous pouvez obtenir un tableau contenant les éléments sélectionnés. En utilisant la méthode
alert(JSON.stringify($scope.selected))
, vous pouvez vérifier les éléments sélectionnés.la source
la source
Jetez un oeil à ceci: modèle de liste de contrôle .
Il fonctionne avec des tableaux et des objets JavaScript et peut utiliser des cases à cocher HTML statiques, sans ng-repeat
Et le côté JavaScript:
la source
Une façon HTML simple de le faire:
la source
En utilisant cet exemple de @Umur Kontacı, je pense qu'en utilisant pour capturer les données sélectionnées dans un autre objet / tableau, comme une page d'édition.
Options de capture dans la base de données
Basculer une option
À titre d'exemple, toutes les couleurs json ci-dessous:
Et 2 types d'objet de données,
array
avec un objet etobject
contenant deux / plusieurs données d'objet:Deux éléments sélectionnés capturés dans la base de données:
Un élément sélectionné capturé dans la base de données:
Et ici, mon code javascript:
Mon code Html:
[Modifier] Code refactorisé ci-dessous:
Et appelez une nouvelle méthode comme ci-dessous:
C'est ça!
la source
J'ai mis un tableau dans le contrôleur.
Sur le balisage, j'ai mis quelque chose comme suit
La sortie était la suivante, dans le contrôleur j'avais juste besoin de vérifier si c'était vrai ou faux; vrai pour coché, absent / faux pour non coché.
J'espère que cela t'aides.
la source
Je pense que la manière suivante est plus claire et utile pour les répétitions ng imbriquées. Découvrez-le sur Plunker .
Citation de ce fil :
la source
Voici le lien jsFillde pour le même, http://jsfiddle.net/techno2mahi/Lfw96ja6/ .
Celui-ci utilise la directive qui est disponible en téléchargement sur http://vitalets.github.io/checklist-model/ .
C'est une bonne chose d'avoir une directive car votre application aura souvent besoin de cette fonctionnalité.
Le code est ci-dessous:
HTML:
Javascript
la source
<div>
que la fermeture,</div>
. Avez-vous oublié quelque chose?Essayez mon bébé:
**
**
Ensuite, pour tout modèle ng avec des cases à cocher, il retournera une chaîne de toutes les entrées que vous avez sélectionnées:
la source