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 :

Injection dynamique de directive dans un template


Sujet :

AngularJS

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut Injection dynamique de directive dans un template
    Bonjour,

    Je suis actuellement entrain de découvrir AngularJS et je pense qu'il y a quelque chose que je n'ai pas compris.

    Pour faire simple, j'ai deux directives "a-tag" et "b-tag" et je souhaite injecter dynamiquement l'une des deux directives à partir du 3ème directive "container". L'idée c'est d'avoir quelque chose du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <body ng-app="myApp">
        <container item="b-tag" b-color="#f00"></container>
    </body>
    J'ai coder ma directive "container" afin qu'elle récupère l'item (a ou b ou même autre chose) et se l'injecte
    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
    17
    18
    19
    20
    21
     
    angular.module("Container", []).directive("container", function($compile){
        return {
            restrict: "EA",
            scope: {
                item: "@"
            },
            link: function(scope, element, attrs){
                var template = '<div id="container">';
                var item = '';
                if(scope.item !== undefined){
                    item = '<' + scope.item;
                    item += ' ></' + scope.item + '>';
     
                }
                template += item + '</div>';
                element.html(template);
                $compile(element.contents())(scope);
            }
        };
    });
    Cela fonctionne mais le problème est que je ne sais pas comment communiquer à ma directive (a/b,etc.) ses attributs (b-color="#f00" comme montré dans le tag container).

    C'est un exemple simple que j'utilise car en réalité le problème auquel je suis confronté et que je souhaite avoir une popup modale (qui correspond à mon container) dans laquelle je veux injecter diverses élements (spinner, formulaire, question, etc.) qui correspondent à mes directives a, b, etc.

    Si quelqu'un a une idée je suis preneur.

    Merci d'avance.

  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
    Je pense que tu as mal compris ce qu'est une directive.

    Une directive c'est un moyen d'enrichir le HTML avec des tags et des classes persos.

    Une fois que ta directive est créée tu n'as pas besoin de l'injecter comme pour un service dans un controleur.

    Tu t'en sers dans ton template directement.

    Bref tu te compliques la vie pour rien.

    Tu peux enlever l'attribut item à container et directement te servir des directives a-tag et b-tag dans le template de container.

    Si ça merde vient poster la stacktrace ici.
    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 du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Salut et merci pour ta réponse .

    Au début j'avais effectivement directement utilisé ma directive a-tag dans le template de ma directive container. Cependant ce qui me gêne c'est que je crée une dépendance directe entre le container et ma directive a-tag. L'idée c'est que le container puisse être réutilisé. Un exemple concret....

    Comme expliqué précédemment, j'ai crée une directive qui m'affiche une popup modale (il s'agit de mon container). Une fois la directive de la popup crée, j'ai utilisé directement dans son template une autre directive, en l’occurrence un loader svg (ce qui correspond à mon a-tag). Maintenant imagine que je souhaite non plus afficher un loader dans ma popup modale (mon container) mais un formulaire, ou une image (b-tag) par exemple. Etant données que le template de la directive de ma popup modale est lié à la directive de mon loader, je vais devoir recréer une directive similaire mais cette fois avec un formulaire dans mon template...C'est pour cela en fait que je souhaite ajouter dynamiquement une directive dans le template de mon container, afin que le container ne dépende pas directement d'une directive particulière.

    Je ne sais pas si mon explication est suffisamment claire.

  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
    Ok je comprends.

    Tu devrais peut être t'inspirer de la modale du pprojet angular-ui. Ils injectent le template et font pas mal de config dans un service.
    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 du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Merci pour le lien je vais jeter un œil

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

Discussions similaires

  1. [2.x] Actualiser dynamiquement des select dans un template
    Par BarbicheIMA dans le forum Symfony
    Réponses: 3
    Dernier message: 21/07/2014, 13h35
  2. Charger dynamiquement une image dans un bouton (issu d'un template) [VB][WPF]
    Par Jayme65 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/03/2012, 12h17
  3. Injecter dynamiquement une fenetre dans une autre
    Par themisn dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/06/2010, 00h58
  4. Comment afficher FLASH directement dans le EMAIL
    Par Bilmagic dans le forum Flash
    Réponses: 3
    Dernier message: 05/06/2003, 00h38
  5. Réponses: 2
    Dernier message: 31/08/2002, 14h00

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