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 :

Sélectionner paramètres visibles


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut Sélectionner paramètres visibles
    Bonjour,

    Je souhaite sélectionner dans mes paramètres (dictionnaire) uniquement ceux qui sont visibles (hidden=true) sur ma page web...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $scope.params = {"material": { "value": ["MAT1"], "activatedBy": [], "desactivatedBy": [], "hidden": false, "fixed": false}, "Analysis": { "value": ["MECA"], "activatedBy": [], "desactivatedBy": [], "hidden": false, "fixed": true}, "Temperature": {"value": "100", "activatedBy": [], "desactivatedBy": [], "hidden": true, "unit": "C"}, "Position in y": {"value": "12", "activatedBy": [], "desactivatedBy": [], "hidden": true, "linked": {"relation": {"a": 1, "b": 0}, "value": ""}, "unit": "mm"}, "Position in x": {"value": "12", "activatedBy": [], "desactivatedBy": [], "hidden": true, "linked": {"relation": {"a": 1, "b": 0}, "value": ""}, "unit": "mm"}, CTE": {"value": "30", "activatedBy": [], "desactivatedBy": [], "hidden": true, "linked": {"relation": {"a": 1, "b": 0}, "value": ""}, "unit": "PPM/K"}};
     
         var params = "{";
     
         for(var key in $scope.params){
              params += "'" + key + "':";
         }
         params = params.slice(0, -1) + "}";
    Ce code fonctionne et me met toutes les keys dans params. Et pour filtrer, j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var params = "{";
        for(var key in $scope.params){
           if($scope.params[key].hidden == "true"){
              params += "'" + key + "':";
           }
        }
        params = params.slice(0, -1) + "}";
    Qui ne fonctionne pas.

    Merci d'avance de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Heu,

    Moi pour faire un filtre avec angular, j'utilise le système natif de filtrage angular du modèle. je fais ceci :

    EXEMPLE : une liste d'étudiant .

    Admettons que ton modèle de données classe.json soit celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nom":"Durand","moyenne":"3","hidden":true},{"nom":"Hammed","moyenne":"12","hidden":true},{"nom":"Grimbert","moyenne":"15","hidden":false}]
    1. Dans le controleur, créer une fonction comme ça, destinée à filtrer ton modèle de donnée en fonction d'un critère, en l'occurence, retourner tous les élèves dont la moyenne de notes soit inférieure à 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*  <!-- FILTRE LE MODELE PAR MOYENNE  --> */
                    $scope.filtreMoyenne = function(etudiant) {
                        return etudiant.moyenne < 5;
                    };
    2. Dans la vue qui affiche les étudiants, se référer à la fonction $scope.filtreMoyenne qui filtre le ng-repeat(ng-repeat est une boucle sur ton objet classe.json):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div ng-repeat=" etudiant IN classe |filter:filtreMoyenne">NOM: {{etudiant.nom}} MOYENNE:{{etudiant.moyenne}}</div>
    3.Résultat :

    Dans ta vue HTML ne s'afficheront que les étudiants dont la moyenne des notes est inférieure à 5, en l'occurence, seul DURAND s'affichera car sa note est < à 5.


    4. Si on veut afficher que les étudiants qui sont cachés (hidden), on crée une autre fonction filtre dans le controleur, du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*  <!-- FILTRE LE MODELE PAR CACHE OU NON (Hidden)  --> */
                    $scope.filtreHidden = function(etudiant) {
                        return etudiant.hidden = true ;
                    };
    puis, on mentionne le filtre dans la vue, dans le ng-repeat (On peut cumuler les filtres ! ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div ng-repeat=" etudiant IN classe |filter:filtreMoyenne|filter:filtreHidden"></div>
    Du coup, seul Durand et Hammed s'afficheront dans ton HTML grâce au filtre "filtreHidden", parce qu'ils ont l'attribut Hidden égal à True, mais vu que le filtre filtreMoyenne est également pris en compte, seul Durand apparaitra.( Les filtres sont cumulatifs, grâce au pipe)

    5. Si on veut faire le contraire, n'afficher que les étudiants qui ne sont pas cachés, on modifie notre fonction de filtrage comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /*  <!-- FILTRE LE MODELE PAR CACHE OU NON (Hidden)  --> */
                    $scope.filtreHidden = function(etudiant) {
                        return etudiant.hidden != true ;
                    };


    Dans ton cas, faudrait créer la fonction de filtrage et faire un truc du style(non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       $scope.filtreHidden = function(param) {
                        return param.hidden = false;
                    };
    puis après, tu affiches ton modèle de données dans un ng-repeat... Et seuls les élèments étant "false" sur "Hidden" vont apparaitre.

    Note : tu peux déclencher tes filtres à partir de select Html ou de cases à cocher...
    J'avais fait un filtre true et false dans cet exo : http://nicolash.org/angular/app8.html
    Dernière modification par Invité ; 27/10/2015 à 10h28.

  3. #3
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Effectivement,
    Il vaut mieux ne pas mettre un ng-if et utiliser à la place un filtre pour des règles de gestion à appliquer dans les templates. Cependant, il ne faut pas implémenter ces règles directement dans les filtres mais dans des services qu'on injecte dans les filtres. Ceci pour centraliser les règles de gestion.

    Une autre solution serait d'utiliser un ng-if mais en appelant directement la méthode d'un service qui va renvoyer true ou false (affichage ou pas).
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

Discussions similaires

  1. style visibility et paramètre
    Par paf le chat dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/05/2008, 16h34
  2. Réponses: 7
    Dernier message: 05/01/2007, 14h14
  3. Réponses: 5
    Dernier message: 05/10/2006, 10h18
  4. Réponses: 2
    Dernier message: 26/07/2006, 12h32

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