2016-10-12 2 views
0

Ich habe das RoutingGet Eltern-URL-Parameter

import { ModuleWithProviders} from '@angular/core'; 
import {Routes, RouterModule} from '@angular/router'; 
import { AppComponent } from './app.component'; 
import { ChildComponent } from './app.child-component'; 
import { Child2Component } from './child2-component'; 


const appRoutes: Routes = [ 
    { 
     path: '', 
     redirectTo: 'AppComponent', 
     pathMatch: 'full' 
    }, 
    { 
     path: ':lang', 
     children: 
     [ 
      { 
       path: '', 
       component: ChildComponent 
      }, 
      { 
       path: 'Child2Component', 
       component: Child2Component 
      } 
     ] 
    } 
]; 

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

ich möchte, dass lang Parameter aus meiner Funktion, die aussieht:

translateThis(lang: any) { 

    // this line works fine 
    this.translate.use(lang); 

    // this doesn't 
    this.sub = this.route.parent.queryParams.subscribe(
    (param: any) => { 
     let lang = param['lang']; 
     console.log(param); 
     console.log(userId); 
    }); 

} 

aber es stoppt, sobald Arbeits Kommentar- i this.sub Code (ganze 6 Zeilen). ohne dass es funktioniert ok

translateThis(lang: any) { 
    this.translate.use(lang); 
} 

Wie kann ich diesen Wert bekommen? Ich habe versucht, params auch statt queryParams aber Ergebnis ist das gleiche

+0

So funktioniert es im Grunde? Was genau sind die 6 Zeilen, die es brechen, wenn Sie sie entfernen? –

+0

@ GünterZöchbauer es übersetzt meine Website ohne Probleme. Dann möchte ich auch URL ändern. deshalb muss ich diesen lang-Parameter bekommen (zum Beispiel ist es 'eng') und dann zum gewünschten Parameter wechseln (zum Beispiel 'fr') – gsiradze

+0

Sorry, ich verstehe nicht, was tatsächlich funktioniert und was nicht funktioniert. –

Antwort

0

Ich denke, das ist, was Sie für

translateThis() { 
    // Subscribe to router params observable 
    this.sub= this.route.parent.params.subscribe(
    param => { 
     let lang = param['lang']; 
     console.log(lang); 
     // Call method or something 
     this.translate.use(lang); 
    }); 
} 

suchen Hier ist ein vollständiges Beispiel von dem, was ich glaube, Sie brauchen. Beachten Sie, dass die Anmeldung an Route Params manuell abgemeldet werden sollte

export class ChildComponent implements OnInit, OnDestroy { 
    private sub; 

    constructor(private route: ActivatedRoute) {} 

    ngOnInit() { 
    // Subscribe to router params observable 
    this.sub= this.route.parent.params.subscribe(
     param => { 
     let lang = param['lang']; 
     console.log(lang); 
     // Call method or something 
     this.translateThis(lang); 
     }); 
    } 

    ngOnDestroy() { 
    // Unsubscribe from router params observable 
    this.sub.unsubscribe(); 

    } 

    translateThis(lang: any) { 
    // Do your thing here 
    // this.translate.use(lang); 
    } 
} 
+0

Ich habe genau den gleichen Code. Bitte sehen Sie hier : http://imgur.com/a/18nRJ – gsiradze

+0

jetzt bekomme ich 'Fehler: Bootstrap mindestens eine Komponente vor der Injektion Router ' – gsiradze