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 :

Directive complémentaire à ng-show


Sujet :

AngularJS

  1. #1
    Membre éprouvé Avatar de Alvaten
    Homme Profil pro
    Développeur Java / Grails
    Inscrit en
    Novembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java / Grails
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 324
    Points : 1 023
    Points
    1 023
    Par défaut Directive complémentaire à ng-show
    Bonjour à tous,

    Je galère un peu à l’élaboration d'une directive qui me permettrai de masquer un élément en fonction d'une condition (basé sur ng-show).
    J'ai réussi à faire quelque chose de fonctionnel avec une directive de type "élément" mais dont le résultat (en terme de code HTML généré) ne me satisfait pas à 100%

    Mon code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    app.directive('maDirective', function() {
    	var directive = {
    		restrict: 'E',
    		transclude: true,
    		scope: {
    			parameter: '@'
    		},
    		template: '<div ng-show="condition" ng-transclude></div>',
    		link: function(scope) {
    			var condition = false;
    			//... plusieurs lignes de calculs complexes
    			scope.condition = condition;
    		}
    	};
    	return directive;
    });
    Quand j'utilise : <ma-directive parameter="XXX"><span class="uneClasse">Hello</span></ma-directive>
    J'obtiens : <div ng-show="condition" ng-transclude><span class="uneClasse">Hello</span></div>

    Je voudrai idéalement créer une directive de type "attribut" que je mettrai sur mon span pour éviter l'ajout de la div supplémentaire englobante (ou de toute autre balise) qui peux potentiellement affecter mon rendu visuel. En passant le restrict en 'A' et en l'appelant <span ma-directive data-parameter="XXX" class="uneClasse">Hello</span> je me retrouve logiquement avec une div interne cette fois. Je n'arrive pas à trouver une solution pour m'en passer complètement.

    Est-ce possible de faire ce que je veux ou est-ce que je cherche dans le vide ou dans la mauvaise direction ?

    En espérant avoir été clair sur mes explications, merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par Alvaten Voir le message
    une directive qui me permettrai de masquer un élément en fonction d'une condition (basé sur ng-show).
    Ben tu as ng-hide qui existe déjà. Pourquoi en créer une autre qui fait pareil ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre éprouvé Avatar de Alvaten
    Homme Profil pro
    Développeur Java / Grails
    Inscrit en
    Novembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java / Grails
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 324
    Points : 1 023
    Points
    1 023
    Par défaut
    Le truc c'est que le ng-hide et ng-show demandent une expression booléenne. Comme mon expression est assez complexe utilisant mon paramètre, je ne vais pas la mettre dans ma vue et comme c'est toujours la même je veux éviter de la copier-coller dans tous les contrôleurs appelant une vue qui l'utiliserai.

    Edit : j'ai aussi fait une version en passant une fonction au ng-show, le résultat HTML correspond à mes attentes mais j'aimerai bien réussir à faire ma directive quand même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <span ng-show="calculComplexe('XXX')">
    Hello
    </span>

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    La bonne pratique c'est de ne mettre aucune condition dans les templates et de passer par des services.

    Donc disons par exemple que dans une vue tu as un bloc dont l'affichage est conditionné par plusieurs règles métiers.

    Tu écris un service pour tes règles métiers, un service pour gérer l'affichage des blocs de ta vue.

    Dans ton service d'affichage des blocs de ta vue tu vas avoir une fonction "displayBlocToto" où toto est le bloc toto. Tu fais une fonction par bloc. Tu publies ce service dans le controller de ta vue. Dans "displayBlocToto" tu exécutes toutes les règles métiers que tu veux et tu finis par renvoyer un booléen.

    Si tu veux réutiliser tes règles métiers dans d'autres vues, pas de soucis il suffit d'injecter les services au besoin.

    Ce pattern a pour avantage d'être très facile à tester unitairement et il conserve le côté déclaratif de la vue.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Membre éprouvé Avatar de Alvaten
    Homme Profil pro
    Développeur Java / Grails
    Inscrit en
    Novembre 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java / Grails
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 324
    Points : 1 023
    Points
    1 023
    Par défaut
    Merci pour ces explications et ton aide ! J'ai pu résoudre mon problème.

    J'ai encore du mal avec certain principes d'Angular et on m'a lancé sur un projet déjà bien en place, apprendre sur le tas c'est pas toujours évident.

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

Discussions similaires

  1. direct show et pda
    Par catstevens01 dans le forum DirectX
    Réponses: 23
    Dernier message: 10/03/2008, 21h32
  2. Réponses: 0
    Dernier message: 09/10/2007, 10h32
  3. Réponses: 5
    Dernier message: 07/04/2006, 03h49
  4. Proble capture direct Show
    Par liliemumue dans le forum DirectX
    Réponses: 3
    Dernier message: 13/12/2004, 21h04
  5. Un tuto pour direct show
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 11
    Dernier message: 04/04/2003, 21h28

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