2017-06-21 3 views
0

In meinem nativescript eckigen Projekt in der Hauptkomponente habe ich zwei untergeordnete Komponenten (TestComponent und Test1Component) jeweils zwei verschiedene Implementierungen einer Aktionsleiste in den beiden Layouts.Nativescript Angular ActionBar ändert sich nicht zwischen Child-Komponenten

Mein Problem ist, dass wenn ich zwischen den zwei untergeordneten Komponenten navigiere die Aktionsleiste in der Ansicht nicht ändert.

Wenn ich jedoch außerhalb der Hauptkomponente zu einer anderen Komponente (Test2-Komponente) navigiere und von dort zu einer der beiden untergeordneten Komponenten zurückkehrt, wird die Aktionsleiste korrekt angezeigt. Kann mir jemand sagen, wie die Aktionsleiste korrekt angezeigt wird, wenn zwischen den beiden untergeordneten Komponenten navigiert wird?

Bearbeiten: Beim Experimentieren habe ich festgestellt, dass das Verhalten passiert, wenn ich eine SearchBar innerhalb der Aktionsleiste in TestComponent hinzufügen. Auch wenn in Test1Component keine searchBar vorhanden ist, wird die Suchleiste weiterhin angezeigt.

My-Code ist wie folgt:

app.routing.ts

import { TestComponent } from "./test.component"; 
import { AppComponent } from "./app.component"; 
import { Test1Component } from "./test1.component"; 
import { Test2Component } from "./test2.component"; 

export const AppRoutes: any = [ 
    { 
     path: "main", component: AppComponent, 
     children: [ 
      { path: "0", component: TestComponent }, 
      { path: "1", component: Test1Component }, 
      { path: "", redirectTo: "0", pathMatch: "full" }, 
     ], 
    }, 
    { path: "", redirectTo: "main", pathMatch: "full" }, 
    { path: "other", component: Test2Component, pathMatch: "full" }, 
]; 

-Test und Test1 Komponente (die 2 Kind-Komponenten) so aussehen

import { Component } from '@angular/core'; 
import { Router } from "@angular/router"; 

@Component({ 
    selector: 'test1', 
    templateUrl: `./test1.component.html` 
     }) 
     export class Test1Component { 

    constructor(private router: Router) { 
     console.log("*********************** Now I am in test1 component *********************"); 
    } 

    goToTest() { 
     this.router.navigate(["/main/0"]); 
    } 

    goToOthers() { 
     this.router.navigate(["/other"]); 
    } 
} 

das HTML-Layout für beide Komponenten ist ähnlich mit verschiedenen Layouts in der Aktionsleiste in jedem

Test1Component.html

 <ActionBar title="Welcome to Test 1" backgroundColor="#f82462" color="white"> 
     </ActionBar> 

    <StackLayout> 
     <Label text="Hi," textWrap="true"></Label> 
     <Label text="Hey I am Test-1, don't confuse with Test" textWrap="true"></Label> 
     <Button text="Go To Test" (tap)="goToTest()"></Button> 
     <Button text="Go To Other" (tap)="goToOthers()"></Button> 
    </StackLayout> 

schließlich das übergeordnete Layout wie diese

ist
<GridLayout rows="*, auto"> 
    <StackLayout row="0" orientation="vertical"> 
     <Label text="demo text"></Label> 
     <router-outlet></router-outlet> 
    </StackLayout> 
</GridLayout> 

Sie auch zu diesem Thema in meinem githubrepo

Bitte Hilfe freuen!

+0

Gibt es einen Grund, die '' in zwei verschachtelten' StackLayout' zu platzieren. Überall, wo ich ActionBar in {N} + Angular gesehen habe, ist ** in der Wurzel ** des Component HTML deklariert. –

+0

@VladimirAmiorkov - Die verschachtelten StackLayouts wurden entfernt. Die ActionBar ändert sich beim Navigieren zwischen den Seiten, wenn sich in der ActionBar nichts befindet. In dem Moment, in dem ich eine SearchBar innerhalb der ActionBar in TestComponent einfüge, wird sie (die SearchBar) weiterhin in Test1Component angezeigt. – Anurag

+0

Ich denke, das Problem ist, dass Sie einen 'Router-Outlet' haben anstatt einen Page-Router-Outlet. Ich denke, so funktioniert der 'router-outlet', stell dir einen inneren Container vor, auf den du einfach den Inhalt änderst, statt eine komplette neue Seitenerstellung zu machen (Navigation) –

Antwort

0

Es scheint, als ob Sie zwei "Haupt" -Seiten haben. eine ist "Hauptleitung" und die andere ist "App-Komponente". Obwohl Sie "Hauptleitungen" in Ihrem Bootstrip "booten", zeigen Sie Ihre Startseite auf "appComponent". und dort benutzt du "router-outlet".

Ich denke, das ist, wo Ihr Problem liegt.

+0

@MatanCp - nicht sicher, ob ich folge - Main ist unsere Root-Komponente und hat daher einen Seiten-Router-Ausgang. Die App-Komponente enthält die 2 untergeordneten Komponenten (Test und Test 1), die in ihrem Router-Outlet gerendert werden. Die Test2-Komponente ist die andere Komponente, die im Seitenrouter-Ausgang wiedergegeben wird. – Anurag

+0

Ich glaube nicht, dass "Hauptleitungen" tatsächlich als Root-Komponente verwendet wird. checken Sie es aus, schreiben Sie dort eine "Warnung" oder "Konsole" und sehen Sie, ob es aktiviert ist. Meine Root-Komponente wird auch in meinem Router verwendet, wie im "Bootstrap" von app.module. In Ihrem Fall verwenden Sie "appcomonent" als unterste Ebene in Ihrem Router. – MatanCo

+0

Nur überprüft - Konsolenmeldung am Netz funktioniert. Aktualisieren Sie dies auch im Repo – Anurag

Verwandte Themen