IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Additions dynamiques dans un ng-if


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut Additions dynamiques dans un ng-if
    Bonjour,
    Je ne suis pas (encore) très fort an angularJS et du coup j'aurai besoin de vos conseils.
    J'ai besoin d'afficher un widget selon le résultat d'une addition de valeurs situées dans des input.
    Je m'explique : j'ai un champ input avec un ng-model="input1"; j'ai un deuxieme champ input avec ng-model="input2"
    Je crée une balise ng-if
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div ng-if="input1 + input2 == 0">
        j affiche mon texte
    </div>
    Ca fonctionne parfaitement, mon texte s'affiche ou non dynamiquement en fonction du contenu de mes input.

    Mon souci est que je ne sais pas combien j'ai de input car en réalité ils sont dans un tableau et la génération se trouve dans une boucle ng-repeat, donc mon ng-if est plutôt
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div ng-repeat="myInput in tabInput"> 
        <div ng-if="tabInput[0] + tabInput[1] == 0">
            j affiche mon texte
        </div>
        <input type="text" ng-model="myInput">
    </div>

    Comment je peux faire pour faire ma vérification de ng-if est restant dynamique et en parcourant tous les éléments de mon tableau ?
    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Si TabInput est destine être infini, alors ce n est pas logique, on ne sait pas vraiment ce que tu veux additionner .
    A moins que ce ne soit tabInput[0] + tabInput[1] qui soient toujours destines etre additionnes dans le ng-repeat, a chaque iteration
    (desole clavier en panne)

    La valeur de l objet en cours peut être testee lors de chaque iteration du style :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div ng-repeat="myInput in tabInput"> 
        <div ng-if="myInput.myValue == 0">
            j affiche mon texte
        </div>
        <input type="text" ng-model="myInput">
    </div>
    *

    Ou alors une chose du style :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div ng-repeat="myInput in tabInput"> 
        <div ng-if="myInput.myValue1 + myInput.myValue2 == 0">
            j affiche mon texte
        </div>
        <input type="text" ng-model="myInput">
    </div>
    *



    [
    Dernière modification par NoSmoking ; 21/03/2017 à 18h40.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    Merci de ta réponse, je vais essayer d'expliquer un peu plus ce que je fais.

    En fait, je construis un formulaire avec angular à partir d'informations passées via JSON par un serveur web, elles mêmes construites à partir de la lecture d'un fichier de config.
    Je voulais mettre un peu de dynamique dedans afin que, si je modifie mon fichier de config mon application s'adaptera. Du coup mon application lit ce fichier JSON et construit mon formulaire selon les infos qui sont dedans (type de widget, valeur initiale, lien entre widgets...)
    Par contre j'ai besoin de mettre un peu de "logique" dans mon formulaire. Par exemple, j'ai un groupe de radio bouton dont le dernier est "other" et si l'utilisateur sélectionne "other" il doit remplir un input text. Donc j'ai mis en place une logique avec des ng-if qui fait que si le "other" est sélectionné et que le input text correspondant est vide, un message apparaît à côté du widget en demandant de le compléter. Cette partie là fonctionne.

    Maintenant, pour une autre logique, j'ai un ensemble de champ input dont je veux que la somme soit différente de 0. Par exemple la question serait "combien avez vous de télévision ?" et j'ai 2 champs input, l'un pour philips, un autre pour samsung et l'utilisateur rentre le nombre de télé qu'il a pour chaque marque. Cependant, je souhaiterai que, dynamiquement, si la somme des champs est égale à 0, un message s'affiche à côté de la question du style "Le nombre de TV doit être >0". Dans mon JSON, je retrouve pour cette question une information qui me dit que je dois additionner le contenu de tel et tel champs pour vérifier que la somme est >0. Donc je peux le faire lors de la soumission du formulaire et afficher un message au bon endroit s'il le faut. Mais je voudrais le faire de façon dynamique dans un ng-if. Ca fonctionne si je rentre "en dur" les additions à faire dans mon ng-if, mais dans mon cas, il faut que l'application se base sur le contenu de mon json pour construire le ng-if et c'est là que ça coince car je ne sais pas combien de champs sont nécessaires d'être additionnés. Car certaines questions portent sur 2 input, d'autres 5, etc...
    D'où ma question si on peut faire des additions "dynamiques".
    J'espère avoir été plus clair...

    Une autre solution serait peut-être de pouvoir, dans la vue, faire des additions dans une variable par exemple {{var a = input1 + input2}} et baser mon ng-if sur la variable "a". Mais pour cela il faudrait que l'affectation se fasse de façon dynamique à chaque changement de valeur dans le input, mais je ne sais pas si c'est possible...

    Merci de votre aide.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    C'est bon, j'ai ma solution, comme quoi ça fait du bien parfois de remettre à plat ce qu'on veut faire, ça ouvre l'esprit... ;-)
    Du coup dans mon ng-if j'appelle une fonction de mon controller en lui passant la clé qui me permet d'accéder aux input à contrôler. Et cette fonction parcourt la liste des input fait les additions et retour true/false selon le résultat.
    Et grâce au data binding, mon message s'affiche dans mon appli...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah oui c'est sympa d'exécuter des fonctions dans le ng-repeat, j'ai du le faire récemment, ça marchait très bien , tu peux passer l'objet à la fonction et hop ca marche!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58
  2. Ecriture dynamique dans la page actuelle
    Par fantomasmusic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/04/2005, 12h23
  3. [jsp] include dynamique dans une jsp
    Par petitelulu dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/03/2005, 07h59
  4. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  5. [D7] Tableaux dynamiques dans un record
    Par bobby-b dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2004, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo