107 votes

Comment obtenir un paramètre à partir d'une url dans angular 4 ?

J'essaie d'obtenir la date de début à partir de l'URL. L'URL ressemble à http://sitename/booking?startdate=28-08-2017

Mon code est le suivant :

aap.module.ts

    import {...};

    @NgModule({
      declarations: [
        AppComponent, ModalComponent
      ],
      imports: [
        BrowserModule,
        FormsModule,
        HttpModule,
        JsonpModule,
        ReactiveFormsModule,
        RouterModule.forRoot([{
                path: '',
                component: AppComponent
            },
        ]),    
      ], 
      providers: [ContactService, AddonService, MainService],
      bootstrap: [AppComponent]
    })
    export class AppModule { }

aap.component.ts

import {...}
import {Router, ActivatedRoute, Params} from '@angular/router';

constructor(private activatedRoute: ActivatedRoute) {
  // subscribe to router event
  this.activatedRoute.queryParams.subscribe((params: Params) => {
    console.log(params);
  });

}

Mais il donne l'erreur suivante

Rejet des promesses non tenues : Pas de base href définie. Veuillez fournir une valeur pour le jeton APP_BASE_HREF ou ajouter un élément de base au document ; Zone : ; Tâche : Promise.then ; Valeur : Erreur : Aucun href de base défini. Veuillez fournir une valeur pour le jeton APP_BASE_HREF ou ajouter un élément de base au document. au document.

Comment Angular connaît-il le href de base ?

1 votes

211voto

Dmitry Grinko Points 1900

Routes

export const MyRoutes: Routes = [
    { path: '/items/:id', component: MyComponent }
]

Composant

import { ActivatedRoute } from '@angular/router';
public id: string;

constructor(private route: ActivatedRoute) {}

ngOnInit() {
   this.id = this.route.snapshot.paramMap.get('id');
}

16 votes

Cette réponse fonctionne mieux que la réponse acceptée dans mon cas. Merci !

0 votes

Si je veux envoyer un objet et que je ne veux pas le montrer dans l'url, que puis-je faire ?

0 votes

@Anuj Utiliser le service

156voto

Curiosity_is_Learning Points 1081

Cela devrait faire l'affaire en récupérant les paramètres de l'url :

constructor(private activatedRoute: ActivatedRoute) {
  this.activatedRoute.queryParams.subscribe(params => {
        let date = params['startdate'];
        console.log(date); // Print the parameter to the console. 
    });
}

La variable locale date devrait maintenant contenir le date de début de l'URL. Les modules Router et Params peuvent être supprimés (s'ils ne sont pas utilisés ailleurs dans la classe).

0 votes

Cette réponse fonctionne, mais pourquoi après avoir rafraîchi la page qui a un paramètre dans l'url, la page devient-elle vide ?

0 votes

Difficile à dire. La première chose qui me vient à l'esprit est que vous naviguez peut-être dans la section ngOnInit du code typecript sans fournir de paramètres ? Alors, il retournera naturellement au composant sans aucun paramètre.

0 votes

Bonjour @Curiosity_is_Learning J'essaie de définir les paramètres de la requête comme une variable globale. Actuellement, avec cette logique, "date" n'est disponible que dans cette méthode d'abonnement, n'est-ce pas ? Comment conserver la valeur de ces paramètres d'interrogation en tant que variable globale ? J'ai essayé let.date =['startdate'] mais lorsque je l'appelle n'importe où en dehors de la méthode subscribe, il est indéfini.

25voto

Teodor Points 170
constructor(private activatedRoute: ActivatedRoute) {
}

ngOnInit() {
    this.activatedRoute.params.subscribe(paramsId => {
        this.id = paramsId.id;
        console.log(this.id);
    });

 }

4 votes

C'est la meilleure réponse à mon avis pour angular 5. Merci !

1 votes

L'observable ne peut pas être résolu sur la trame de l'eventloop suivant avec undefined dans la console ?

0 votes

Cela me donne "undefined"

8voto

edkeveked Points 4260

La réponse acceptée utilise l'observable pour récupérer le paramètre, ce qui peut être utile lorsque le paramètre change tout au long du cycle de vie du composant.

Si le paramètre ne change pas, on peut envisager d'utiliser la fonction paramètres sur l'instantané de l'url du routeur.

snapshot.params renvoie tous les paramètres de l'URL dans un objet.

constructor(private route: ActivateRoute){}

ngOnInit() {
   const allParams = this.route.snapshot.params // allParams is an object
   const param1 = allParams.param1 // retrieve the parameter "param1"
}

6voto

Hunter Frazier Points 407

Vérifier les paramètres à partir de la chaîne de l'URL ou en tant que :param dans votre routeConfig

downstream.component.ts

...
import {Router,ActivatedRoute} from '@angular/router';
...    
export class DownstreamComponent  {
    constructor(
    private route: ActivatedRoute,
    private router: Router
) {
    if(this.route.snapshot.queryParams) 
      console.log(this.route.snapshot.params); // e.g. :param1 in routeConfig
    if(this.route.snapshot.queryParamMap.get('param1'))
      console.log(this.route.snapshot.queryParamMap.get('param1')); // e.g. in URI ?param1=blah
}

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X