2017-01-14 1 views
3

Ist es möglich, ein komplexes Objekt über einen Router zu senden? Hier ist, was ich mache und versuche zu tun:Kann Winkel 2 ein komplexes Objekt entlang des Routers passieren?

Von der Suchseite kann eine Verwendung auf eine Schaltfläche auf einem der Ergebnisse, die die Methode, die diese Linie ausgelöst wird, ruft klicken. this.router.navigate(['profile-detail', selection]);

Das Objekt selection sieht so aus, kurz vor der Navigation.

{ 
    profile: { 
    id: number, 
    fname: string, 
    lname: string 
    }, 
    contact: { 
    type: string, 
    address: string 
    }, 
    books: [{ 
    title: string, 
    author: string 
    }] 
} 

Wenn wir jedoch auf das Profil-Detailseite erhalten, die this.route.snapshot.params dies als die tatsächlichen Daten hat:

{ 
    profile: "[object Object]", 
    contact: "[object Object]", 
    books: "[object Object]" 
} 

Antwort

3

Nein, der Router die Daten an den Browser URL-Leiste serialisiert werden muss, und die URL-Leiste unterstützt nur eine Zeichenfolge.

Sie können einen Shared-Service verwenden, um Objekte zwischen Komponenten übergeben, die nicht Eltern/Kind oder Geschwister oder dynamisch hinzugefügt werden, wie der Router funktioniert.

Siehe auch https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

Ein Resolver auch funktionieren könnte je nach konkreten Anforderungen https://angular.io/docs/ts/latest/guide/router.html#!#resolve-guard

+0

@TimConsolazio 'EventEmitter' soll nur mit' @Output() 'in Komponenten verwendet werden. Verwenden Sie in Services stattdessen Observables. http://Stackoverflow.com/a/35568924/217408, https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.html –

+1

Danke, ich hatte eine ähnliche Antwort in anderen gesehen ähnliche Fragen. Aber Ihre Erklärung zur Serialisierung fehlte bei diesen anderen Antworten. – Machtyn

+0

Auch hier hat Angular 1.x viele Dinge empfohlen, die das Feld generell aufgegeben hat. Und für das Protokoll fand ich es äußerst konstruktiv. –

0

anderen kann JSON.stringify verwenden und Ihr Objekt im lokalen Speicher oder Sitzungsspeicher speichern und haben es weit verbreitet in der gesamten zur Verfügung stehenden App