2017-09-18 2 views
0

Nehmen wir an, wir haben eine Navigationsleiste mit Dropdown-Menü, mit der Sie eine Stadt auswählen können. Wenn wir eine Stadt wählen, werden wir zu http://Domain/:city umgeleitet und normalerweise sollte die Navbar-Dropdown-Liste den Namen der ausgewählten Stadt anstelle von "wählen Sie eine Stadt" zeigen. Die App-Komponente enthält die Navigationsleiste und eine Router-Steckdose, die zu einer Komponente mit den Informationen der Stadt umleiten. Diese Komponente erhält den Namen der Stadt von URL mit ActivatedRoute.Angular4 navbar-Wert in einer untergeordneten Komponente ändern

-- app.component.ts -- 
<app-navbar></app-navbar> 
<router-outlet></router-outlet> 

-- navbar.html-- 
<ul class="nav pull-left"> 
     <li class="dropdown pull-right"> 
      <a href="#" data-toggle="dropdown" class="dropdown-toggle"> 
      <span *ngIf="!_selectedCity">Choose a city</span> 
      <span *ngIf="_selectedCity">{{ _selectedCity.name }}</span> 
      <b class="caret"></b> 
      </a> 
      <ul class="dropdown-menu"> 
      <li routerLinkActive="active" *ngFor="let city of _cities"><a [routerLink]="['', city.name]" (click)="selectCity(city)">{{ city.name }}</a></li> 
      </ul> 
     </li> 
</ul> 

Um in der Navigationsleiste Dropdown-Liste zu ändern „Wählen Sie eine Stadt“ auf den Namen der gewählten Stadt, füge ich das OnClick-Ereignis und es funktioniert perfekt. Aber wie kann ich den Drop-Down-Wert der Navbar auf den Stadtnamen einstellen, wenn der Benutzer Zugang zu den Stadtinformationen erhält, indem er die URL eingibt, anstatt die Stadt aus dem Dropdown zu wählen?

Danke

+0

können Sie entweder fügen Sie eine Arbeits Demo für das Problem oder Show mehr Code Ihrer Komponente und Vorlage? – amal

Antwort

0

Sie abonnieren können Ereignis-Router und die URL param in OnInit der Komponente überprüfen Sie die Dropdown-Wert zu setzen:

import { ActivatedRoute } from '@angular/router'; 
... 
constructor(private activatedRoute: ActivatedRoute) {} 
... 
ngOnInit() { 
    this.activatedRoute.params.subscribe((params: Params) => { 
     console.log(params['cityName']); //or whichever you use 
     }); 
    } 
+0

Ich dachte über diese Lösung nach, aber ich denke, dass es nicht die richtige ist. Angular sollte erlauben, Daten zwischen Komponenten zu übertragen. – Zak

+0

Welche Komponenten? Auch wenn Benutzer die URL von der Adressleiste eingeben, gibt es keine Übertragung – Vega

+0

Ich fand vielleicht eine Lösung, die einen Dienst verwendet, um Daten von einer Komponente zu einer anderen zu übertragen. Ich werde diese Schritte befolgen und ich denke, dass es mein Problem lösen wird. https://angularfirebase.com/lessons/sharing-data-between-angular-components-four-methods/ – Zak

Verwandte Themen