Erste url id mit params und ActivatedRoute Winkel-2
Ich versuche zu bekommen eine uuid aus der URL (die aussieht wie https://something.com/card?id=wo uuid geht) und verwenden Sie dann die uuid zu bekommen, eine http-get-Anfrage.
Jetzt habe ich meine app.Komponente.ts sieht so aus:
private cardUuid: string;
constructor(private service: AppService,
private route: ActivatedRoute){
let sub = this.route.params.subscribe((params: Params) => {
this.cardUuid = params['id'];
console.log(this.cardUuid)
})
}
ngOnInit(){
this.service.browserUuid = 'http://address/cards?uuid=' + this.sub.cardUuid;
console.log(this.sub.cardUuid)
}
Meine Konsole die logs wieder als undefiniert. Ich Frage mich, warum das der Fall ist? Ist die Methode für das abrufen der uuid falsch oder ist der Aufruf timing falsch?
Jede Hilfe/Tipps/Anregungen würde sehr geschätzt.
Update:
nach einem Vorschlag von @Alexander Staroselsky, ich umstrukturiert meiner Methode der Aufruf der uuid aus der url pro Winkel.io-docs.
app.Komponente.ts:
card: Card = {};
ngOnInit() {
this.route.paramMap
.switchMap((params: ParamMap) =>
this.service.fetchCardUuid(+params.get('id')))
.subscribe(
card => {
this.card = card;
this.getVenueUuid(this.card);
});
}
app-service.ts:
public UuidUrl = 'http://websiteaddress/cards?uuid='
constructor(private http: Http){}
private extractData(res:Response) {
let body = res.json();
return body || [];
}
fetchCardUuid(id: number) {
return this.http.get(this.UuidUrl + id)
.map(this.extractData)
}
Jedoch bin ich immer noch nicht die app zu laden, die richtige Verwendung der Uuid wird von der folgenden Url abgerufen. In der Konsole Netzwerk zeigt eine get-Anforderung-Karte?uuid=0. Wieder, jede Hilfe wäre sehr geschätzt werden.
- Das url-Muster
http://address/cards?uuid=
ist mitqueryParams
, nichtparams
. Sie benötigenthis.route.queryParamMap
stattthis.route.paramMap
.paramMap
werden keine Werte auf, wie die url aufgebaut wird. - Das funktionierte! Ich bin mir sicher, Sie sind sich bewusst, jetzt, mein Verständnis von queryParam versus param fehlt, um das Mindeste zu sagen. Wir entschuldigen uns für, die. Aber das ziehen die id aus der URL jetzt. DANKE!!!
- Bitte posten Sie die Lösungen als Antworten, die nicht als updates für die Frage. Dies ist um Verwirrung zu vermeiden. Danke.
- Dieses answer eine gute Beschreibung
params
vsqueryParams
im Kontext der Allgemeinen RESTful-API-Anwendungen. Meine ursprüngliche Antwort hatte queryParams verwiesen. Froh zu hören, es hat geklappt! Bitte markieren Sie die Antwort, die Ihnen helfen, die Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das format für die URL, die Sie zur Verfügung gestellt wird utilitizing query params (queryParams) anstatt die route params.
Update:
params
würde verwendet werden, um eine route parameter wieid
in der folgenden routing-Konfiguration (die:id
im'hero/:id'
):queryParams
würde verwendet werden, um query-Parameter aus einem url-Muster wie Ihrehttps://something.com/card?id=
. Die Kennung wäreid
der Teil nach?
und vor der=
.{ path: 'hero/:id', component: HeroDetailComponent }
Erhalten Sie die Abfrage-Parameter in ähnlicher Weise wie
this.route.params.subscribe()
mitthis.route.queryParams.subscribe()
wie diese:UPDATE:
Abhängig von der version der Winkel - (4+), die Sie verwenden, müssen Sie die access-query params über eine beobachtbare auf ActivatedRoute genannt queryParamMap:
Update:
Ein mögliches Problem, die verursachen könnten Probleme ist
this.sub.cardUuid
imngOnInit()
. Definieren Sie eine variablesub
Vertreter der Beobachten lokalen scope des Konstruktors. Es würde nicht zugänglich sein, inngOnInit()
. Wennthis.sub
versucht, beziehen sich auf diesub
im Konstruktor, das Abonnement würde keine route params, wie cardUuid direkt zur Verfügung.this.sub
zurückkommen würde, nicht definiert undthis.sub.cardUuid
würde auch im Gegenzug kommen wieder undefiniert. Auch, Sie können nicht damit rechnen, ngOnInit ausgeführt nachsubscribe()
ausgeführt hat, damit das behobencardUuid
von params kann einfach nicht verfügbar sind.Hier ist ein plunker der offiziellen Winkel-router-live-Beispiel. Wenn Sie auf Datei suchen app/Helden-detail.Komponente.ts und Lesen Sie die Anmerkungen und die Konsole Aussagen, wenn Sie in eine Helden-detail-Komponente/Ansicht, du wirst undefiniert Fehler vom versuchen, sich
this.sub
undthis.sub.uuid
.Hoffentlich das hilft!
this.sub
bezieht? Siehe meine aktualisierte Antwort.ngOnInit()
undcontructor()
nur einmal ausgeführt, wenn die Komponente instanziiert wird, in diesem Fall, wenn ein held ausgewählt ist aus der Hauptansicht der Beispielanwendung.ngOnInit()
undcontructor()
sind effektiv das gleiche tun, hier ist nur das abrufen von Werten in unterschiedlicher Weise.this.route.paramMap
. Ihre Plunker Beispiel funktioniert großartig für mich.Mit der Hilfe von @AlexanderStaroselsky und @Winkel-docs eine Lösung gefunden wurde.
Mein letzten ngOnInt() im app.Komponente.ts sieht wie folgt aus:
Diese Lösung effektiv wird die id aus der Url und sendet diese id in einem meiner service, um einen get-request. Wieder, cred geht an @AlexanderStaroselsky für die Lösung.