J'essaie de migrer de rc1 vers rc4 et j'ai du mal à obtenir les paramètres de la chaîne de requête. Objet ActivatedRoute toujours vide.
hero.component.ts
import {Component, OnInit} from "@angular/core";
import {Control} from "@angular/common";
import {ROUTER_DIRECTIVES, ActivatedRoute} from '@angular/router';
@Component({
template: '../partials/main.html',
directives: [ROUTER_DIRECTIVES]
})
export class HeroComponent implements OnInit {
constructor(private _activatedRoute: activatedRoute) {
}
ngOnInit() {
this._activatedRoute.params.subscribe(params => {
console.log(params);
});
}
}
main.ts
import {bootstrap} from '@angular/platform-browser-dynamic';
import {HTTP_PROVIDERS, RequestOptions, Http} from '@angular/http';
import {AppRouterProviders} from './app.routes';
bootstrap(AppComponent, [
AppRouterProviders,
HTTP_PROVIDERS
]);
app.component.ts
import {Component, OnInit} from '@angular/core';
import {HeroComponent} from './hero.component';
import {RouteConfig, Router, ROUTER_DIRECTIVES} from '@angular/router';
@Component({
selector: 'my-app',
templateUrl: '../partials/main.html',
directives: [
HeroComponent,
ROUTER_DIRECTIVES
]
})
export class AppComponent {
}
partials/main.html
<a class="nav-link" [routerLink]="['/']" [queryParams]="{st: 'new'}">New</a>
app.routes.ts
import {provideRouter, RouterConfig} from '@angular/router';
import {HeroComponent} from './hero.component';
import {ErrorComponent} from './error.component';
const routes: RouterConfig = [
{path:'', component: HeroComponent},
{path:'**', component: ErrorComponent}
];
export const AppRouterProviders = [
provideRouter(routes)
];
Quand je clique sur le lien 'Nouvelle' console imprime un objet vide
Objet {}
Mis à jour
update (2.0.0 final)
(somepath/:someparam/someotherpath
) vous pouvez vous y abonner en utilisant _router.queryParams.subscribe(...)
:
export class HeroComponent implements OnInit {
constructor(private _activatedRoute: ActivatedRoute, private _router:Router) {
_activatedRoute.queryParams.subscribe(
params => console.log('queryParams', params['st']));
original
Si vous voulez queryParams
au lieu de route params (somepath/:someparam/someotherpath
), vous pouvez vous y abonner en utilisant _router.routerState.queryParams.subscribe(...)
:
export class HeroComponent implements OnInit {
constructor(private _activatedRoute: ActivatedRoute, private _router:Router) {
_router.routerState.queryParams.subscribe(
params => console.log('queryParams', params['st']));
Je luttais avec le même problème depuis longtemps ... La réponse est délicate, dans la documentation, il était indiqué:
ActivatedRoute: Service fourni à chaque route composant qui contient des informations spécifiques à la route, telles que les paramètres de route, les données statiques, les données de résolution, les paramètres de requête globale et le fragment global . Ceci est mentionné dans ici
La solution est 'composant de route', ce qui signifie que ActivatedRoute ne fonctionnera que sur les composants routés. En d'autres termes, seuls les composants décrits dans la table de routage.
J'ai écrit un petit code d'investigation pour rechercher ce problème dans app.module.ts autonome:
import { Component, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule, Routes, ActivatedRoute } from '@angular/router';
@Component({
selector: 'comp1',
template: `<h4>comp1 works</h4>`,
})
export class Comp1 { }
@Component({
selector: 'comp2',
template: `<h4>comp2 works</h4>`,
})
export class Comp2 { }
@Component({
selector: 'fail',
template: `<div>Wrong URL:{{url | json}}</div> <h4>Failure page works</h4>`,
})
export class Fail {
private url: any;
constructor(public activeRoute: ActivatedRoute) {
this.url = activeRoute.snapshot.url
};
}
@Component({
selector: 'app-root',
template: `<div>Base URL:{{url | json}}</div> <router-outlet></router-outlet>`,
})
export class App {
private url: any;
constructor(public activeRoute: ActivatedRoute) {
this.url = activeRoute.snapshot.url
};
}
const appRoutes: Routes = [
{ path: '1', component: Comp1 },
{ path: '2', component: Comp2 },
{ path: '**', component: Fail }
];
@NgModule({
imports: [BrowserModule, RouterModule.forRoot(appRoutes)],
declarations: [App, Comp2, Comp1, Fail],
bootstrap: [App]
})
export class AppModule { }
Essayez d’exécuter le module pour l’URI suivant:
Bonne chance, espérons que le code est démonstratif.
vérifier la documentation angulaire, tout y est: https://angular.io/docs/ts/latest/guide/router.html
constructor(
private route: ActivatedRoute,
private router: Router,
private service: HeroService) {}
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
let id = +params['id']; // (+) converts string 'id' to a number
this.service.getHero(id).then(hero => this.hero = hero);
});