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

Angular Discussion :

RouterLink dans ma popup


Sujet :

Angular

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut RouterLink dans ma popup
    Bonjour à tous,

    Je suis actuellement entrain réaliser un exercice et je suis bloqué, pourriez vous m'aiguiller s'il vous plait ?

    Le problème : Quand je clique sur mon marqueur, ma popup s'ouvre correctement avec les données que je souhaite, jusque la pas de problème. Mais ensuite je voudrais que mon bouton me renvoi vers mon formulaire sur une autre page et la je ne comprend ça ne fonctionne pas. Après avoir cherché de mon côté je viens vers vous pour m'aider a me débloquer.
    Je vous met une capture de mon code.

    Nom : Capture d’écran 2022-04-27 à 14.32.54.png
Affichages : 228
Taille : 795,5 Ko

    En esperant qu'une personne pourra m'aider.

    Cordialement,
    Alexandre

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    le marker fait partie de google maps
    le code html que tu y met fait partie de google maps et non d'angular

    donc le routerlink ne fonctionnera pas

    faut plutot utiliser du html classique avec un href

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Merci pour l'information Krakatoa mais comment dois je m'y prendre ?
    Dois-je mettre le popup dans le fichier html aussi ou je peux laisser le popup dans le fichier ts et ajouter la partie intérieur du popup dans le fichier html ?
    Je comprend pas trop la manière dont il faut s'y prendre.
    En espérant que vous pourriez m'éclairer un peu plus sur le sujet.

    Cordialement,
    Alexandre

  4. #4
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    tu peux mettre le code avec la balise #

    tu peux essayer ce code :

    (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .on('click', () => {
      console.log('click !!!!!!!!')
    });

    à quel moment click !!! s'affiche dans la console ?
    clic sur le bouton ou sur le marqueur ou les 2 ?


    (2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    .bindPopur('
     
      <button (click)="clickMark()">......</button>
    ')
    .on('click', () => {
      console.log('click !!!!!!!!')
    });
     
     
    clickMark() {
      console.log('clickMark !!!')
    }
    clickMark !!! s'affiche dans la console ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Pour le (1), le click s'affiche dans la console quand je clique sur le marqueur.
    Pour le (2), ça ne fonctionne pas.

    Mais je ne vois pas la ou vous voulez en venir ?

    Mon but étant de faire fonctionner mon bouton "Réserver un vélo" et me rediriger vers une autre page.

    Bien cordialement,
    Alexandre

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    (1) et pas sur le bouton ?


    (3)
    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
    .bindPopur('
     
      <button id="toto">......</button>
    ')
    .on('click', () => {
     
    });
    ...
    ...
    document.getElementById ("toto") .addEventListener('click',function ()
    {
        console.log("test3");
     
        this.router.navigate(['/ma-page', { id: heroId }]);  // exemple avec paramètre
    });

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Non pas sur le bouton. Ça m'embête car c'est un service et je n'ai donc pas de fichier html qui correspond au service. Enfin je suis un peu perdu la. C'est dommage parce qu'il me reste plus qu'a trouver cette solution pour terminer mon exercice.

    Je vais essayer ce que vous venez de m'envoyer, merci encore

  8. #8
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    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
     
    .bindPopur('
     
    <button id="toto">......</button>
    ')
    .on('click', () => {
     
    });
    ...
    ...
    document.getElementById ("toto") .addEventListener('click',function ()
    {
    console.log("test3");
     
    this.router.navigate(['/ma-page', { id: heroId }]); // exemple avec paramètre
    });
    faudra nommer dynamiquement les id des markeurs car ils ne peuvent pas s'appeller tous "toto"

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    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
    22
     
    public makeStationMarkers(map: L.Map): void {
        fetch('https://api.jcdecaux.com/vls/v1/stations?contract=cergy-pontoise&apiKey=c90a137bb16a557c0dc0362a3606b71ce06515fe')
        .then((resp) => resp.json())
        .then(function(data) {
          for(let coords of data){
            L.marker([coords.position.lat, coords.position.lng])
            .bindPopup(`
              <h3>${coords.name}</h3>
              <p>${coords.address}</p>
              <p>${coords.available_bikes}</p>
              <button id="toto" routerLink="/app-form" class="btn">Réserver un vélo</button>
            `)
            .on('click',()=>{
              console.log('click!!!!')
              map.flyTo([coords.position.lat,coords.position.lng]);
            }).addTo(map);
          }
        });
        document.getElementById("toto")?.click();
      }
    }
    Ça ne fonctionne toujours pas au click sur le boutton

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    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
    22
    23
    24
    25
     
    public makeStationMarkers(map: L.Map): void {
        fetch('https://api.jcdecaux.com/vls/v1/stations?contract=cergy-pontoise&apiKey=c90a137bb16a557c0dc0362a3606b71ce06515fe')
        .then((resp) => resp.json())
        .then(function(data) {
          for(let coords of data){
            L.marker([coords.position.lat, coords.position.lng])
            .bindPopup(`
              <h3>${coords.name}</h3>
              <p>${coords.address}</p>
              <p>${coords.available_bikes}</p>
              <button id="toto">Réserver un vélo</button>
            `)
            .on('click',()=>{
              console.log('click!!!!')
              map.flyTo([coords.position.lat,coords.position.lng]);
            }).addTo(map);
          }
        });
        document.getElementById("toto") ?.addEventListener('click', function(){
          console.log("test3");
          this.router.navigate(['/app-form', {id: this.id}]);
        });
      }
    }
    Il ne reconnait "router"

    Je me demande si je vais réussir à le résoudre ce problème.
    En tout cas je vous en remercie beaucoup malgré qu'on est pas trouvé la solution pour le moment

  11. #11
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    tu as bien mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      constructor(private router: Router) { }
    et essaye ça :

    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
    22
    23
    24
    25
    26
    27
    public makeStationMarkers(map: L.Map): void {
        const that = this;
    
        fetch('https://api.jcdecaux.com/vls/v1/stations?contract=cergy-pontoise&apiKey=c90a137bb16a557c0dc0362a3606b71ce06515fe')
        .then((resp) => resp.json())
        .then(function(data) {
          for(let coords of data){
            L.marker([coords.position.lat, coords.position.lng])
            .bindPopup(`
              <h3>${coords.name}</h3>
              <p>${coords.address}</p>
              <p>${coords.available_bikes}</p>
              <button id="toto">Réserver un vélo</button>
            `)
            .on('click',()=>{
              console.log('click!!!!')
              map.flyTo([coords.position.lat,coords.position.lng]);
            }).addTo(map);
          }
        });
        document.getElementById("toto") ?.addEventListener('click', function(){
          console.log("test3");
          that.router.navigate(['/app-form', {id: this.id}]);
        });
      }
    }

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Cette fois ci plus d'erreur dans le code, merci pour le router je l'avais oublié.. mais quand je clique sur 'réserver un vélo' ça ne réagit toujours pas dans l'inspecteur

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    export class MarkerService {
      constructor(private http: HttpClient, private router:Router) { }
     
      public makeStationMarkers(map: L.Map): void {
        const that = this;
     
        fetch('https://api.jcdecaux.com/vls/v1/stations?contract=cergy-pontoise&apiKey=c90a137bb16a557c0dc0362a3606b71ce06515fe')
        .then((resp) => resp.json())
        .then(function(data) {
          for(let coords of data){
            L.marker([coords.position.lat, coords.position.lng])
            .bindPopup(`
              <h3>${coords.name}</h3>
              <p>${coords.address}</p>
              <p>${coords.available_bikes}</p>
              <button id="toto">Réserver un vélo</button>
            `)
            .on('click',()=>{
              console.log('click!!!!')
              map.flyTo([coords.position.lat,coords.position.lng]);
            }).addTo(map);
          }
        });
        document.getElementById("toto") ?.addEventListener('click', function(){
          console.log("test3");
          that.router.navigate(['app-bookink', {id: this.id}]);
        });
      }
    }

  13. #13
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    "test3' s'affiche ou pas ?

  14. #14
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Merci pour votre réactivité.

    Non, il ne s'affiche pas.

  15. #15
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    peut etre comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            .on('click',()=>{
              console.log('click!!!!')
              map.flyTo([coords.position.lat,coords.position.lng]);
     
              document.getElementById("toto") ?.addEventListener('click', function(){
                console.log("test3");
                that.router.navigate(['app-bookink', {id: this.id}]);
              });
            }).addTo(map);
          }
        });
     
      }

    sinon met ton probleme sur stackoverflow
    traduit avec un traducteur anglais si tu n'es pas doué in english

    il y a aussi la chaine angular sur discord

  16. #16
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Génial !!!!
    Merci beaucoup, j'arrive enfin sur la page de mon formulaire

  17. #17
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    au moment où le script exécute cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("toto") ?.addEventListener('click', function(){
    ton élément bouton n'existe pas encore, l'utilisation du chaînage optionnel ?. évite les erreurs mais n'aide pas forcément à avoir une vision correcte de ce qui se passe !

    La méthode qui est proposée est un pis-aller car à chaque fois que l'on va cliquer sur la popup il va se rajouter un événement sur le bouton.

    Une méthode plus simple serait d'utiliser le paramètre event passer à le fonction lors du click, quelque chose comme :
    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
    22
    23
    24
    25
    26
    27
    for (let coords of data) {
      const marker = L.marker([coords.position.lat, coords.position.lng])
        .bindPopup(`
          <h3>${coords.name}</h3>
          <p>${coords.address}</p>
          <p>${coords.available_bikes}</p>
          <button id="toto">Réserver un vélo</button>
        `)
        .on('click', () => {
          map.flyTo([coords.position.lat, coords.position.lng]);
        })
        .addTo(map);
     
      // une façon de gérer la popup
      // ouvre la popup pour que le DOM la construise et la récupère
      const popup = marker.openPopup().getPopup();
      // on la referme
      marker.closePopup();
      // affectation de l'événement sur le HTMLElement
      L.DomEvent.on(popup.getElement(), "click", (event) => {
        if ("BUTTON" == event.target.tagName) {
          that.router.navigate(['app-bookink', {
            id: this.id    // Attention à la valeur de l'ID avec this
          }]);
        }
      });
    }
    ... accessoirement cela évite les ID dupliquées !

    Une autre bonne solution serait de créer un composant popup, cela doit même déjà exister en Angular.

    [Edit] correction du code pour qu'il soit fonctionnel dans le contexte décrit

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut

    j'ai corrigé le code pour qu'il soit fonctionnel, normalement, dans le contexte décrit, j'avais fait un peu trop de raccourci !

  19. #19
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Par défaut
    merci, ça peut etre utile !

  20. #20
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2022
    Messages : 51
    Par défaut
    Merci beaucoup pour cette solution

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

Discussions similaires

  1. routerLink dans une popup leaflet
    Par balasti dans le forum Angular
    Réponses: 3
    Dernier message: 01/05/2020, 20h40
  2. [Form et popup] target d'un form ouvert dans une popup
    Par Flobel dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/01/2007, 21h05
  3. form dans une popup
    Par amika dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/05/2005, 16h06
  4. Refresh de page initiale après saisie dans une popup
    Par muppetshow dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/03/2005, 12h21
  5. perte de son du swf à l'ouverture dans un popup
    Par carlito dans le forum Flash
    Réponses: 6
    Dernier message: 02/01/2004, 17h31

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