2016-10-08 1 views
1

Ich benutze angular 2.0.0 und ich habe eine URL wie folgt aus:Angular2.0.0 - erhalten die Query-String (mit?) Von url Hashtag Standortstrategie

http://localhost:4200/?sptoken=MY_TOKEN#/resetPassword/

ich MY_TOKEN von ihm erhalten möchten. Ich habe alles versucht, was ich hier finden konnte, aber ich bekomme nur "undefined".

Das zweite Problem ist, dass ich Hashtag-Location-Strategie verwenden und wenn ich auf die URL so zugreifen wird es in http://localhost:4200/#/resetPassword/ (die Abfrage Zeichenfolge ist weg), der einzige Zeitpunkt, wenn ich auf dieses Token zugreifen konnte, ist in der Hauptkomponente zuvor Es wird transformiert, aber ich weiß nicht, wie ich es bekommen soll. Die meisten Dinge, die ich gefunden habe, beziehen sich auf die Abfrageparameter der Matrixnotation.

Haben Sie Vorschläge, wie ich das lösen kann?

Dies ist mein Code:

export class ResetPasswordComponent implements OnInit { 

    constructor(private route: ActivatedRoute) { 
    console.log(this.route.snapshot.queryParams['sptoken']); // when i don't use 
               //HashLocationStrategy it logs the token 
    } 

} 

export class AppComponent implements OnInit { 

    constructor(private router: Router, public configService: ConfigService, private cookieService: CookieService,private route: ActivatedRoute) { 
    console.log(this.route.snapshot.queryParams['sptoken']); 
    } 
} 

Und meine Routen:

const appRoutes: Routes = [ 
    {path: UrlPaths.HELLO, component: HelloComponent, canActivate: [PrivatePageGuard]}, 
    {path: UrlPaths.LOGIN, component: LoginComponent}, 
    {path: UrlPaths.MAIN_PAGE, component: AppComponent}, 
    {path: UrlPaths.FORGOT_PASSWORD, component: ForgotPasswordComponent}, 
    {path: UrlPaths.RESET_PASSWORD, component: ResetPasswordComponent} 
]; 

export const appRoutingProviders: any[] = []; 

export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); 


export const UrlPaths = Object.freeze({ 
    LOGIN: 'login', 
    HELLO: 'hello', 
    FORGOT_PASSWORD: 'forgotPassword', 
    RESET_PASSWORD: 'resetPassword', 
    MAIN_PAGE: '' 
}); 

Ich habe auch unter Verwendung dieser URL den Token in der Hauptkomponente zu erhalten, um zu versuchen versucht: http://localhost:4200/?sptoken=MY_TOKEN# aber es passiert das gleiche

+0

'sptoken' setzen Sie es mit' queryParams' ??? – micronyks

+0

ja, ich benutze eine externe API für die Authentifizierung und das Zurücksetzen des Passworts und sie senden mir das Token durch Abfrage params –

Antwort

0

Dies ist wahrscheinlich wegen einer Umleitung. Abfrageparameter werden für Umleitungen nicht beibehalten. Statt einer Umleitung fügen Sie eine Dummy-Komponente hinzu, in der Komponente erhalten Sie die Abfrage-Parameter von der aktivierten Route und dann die Umleitung mit router.navigate()

+0

Ich habe versucht, dass es aber nicht funktioniert wegen der HashLocationStrategy, erkennt die Abfrage Zeichenfolge nicht, wenn ich don benutze es nicht, es funktioniert aber ich muss es verwenden –

+0

Ich glaube nicht, dass dies mit 'HashLocationStrategy' zusammenhängt. 'HashLocationStrategy' funktioniert genauso wie' PathLocationStrategy', nur die URL-Darstellung ist anders (und die spätere erfordert Server-Unterstützung). Vielleicht schaust du auf das falsche Level. Abfrageparameter sind nur auf Routen der obersten Ebene verfügbar. –

+0

Ich habe nur Top-Level-Routen, ich versuchte es sogar in der Haupt-App-Komponente, aber ich konnte es immer noch nicht bekommen –

Verwandte Themen