0
votes

I have a Github page that I will link to that has all of my code. So basically, I'm using Angular 8 along with NativeScript to build my first app. I've been following a Udemy tutorial and decided to have a series of components. A Menu component which serves as my Home routing path and a series of child routes. The Menu has a TabView which when each tab is clicked, it opens a different component. Right now, I have an About component, a Store component, and a Join component. When each child component route is opened, I wanted to have a BUTTON attach to each child route that routed to another page when clicked. So a button on the About Component that leads to an About Details component that will just have text about the company.

The problem is either with my routing or the page-router-outlet on iOS. I have an iPad and an Android phone I'm using to test things until I get a new Mac to set up the emulators. When I use the page-router-outlet in a certain location on the about-tab.component.html page, it works fine on Android and opens up the About Details component. But on iOS, nothing happens. I click the button...and nothing moves at all.

I've tried moving the page-router-outlet to different locations on the about-tab.component.html file and it either completely breaks the About tab on iOS and the screen is blank (and doesn't show anything, not even the words), or it stays the same. I created a GitHub page...

https://github.com/eoscryptodev/Best-Laces-Out

I've also tried to move around the location of the routes themselves. I tried making the About Details component a child of the About Component, which is a child of the Home component (Main). I also tried putting the component on the same level as the Home (Menu) component.

app-routing.module.ts

import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
import { NativeScriptCommonModule } from 'nativescript-angular/common';
import { NativeScriptRouterModule } from 'nativescript-angular/router';
import { Routes } from '@angular/router';
import { MenuComponent } from './menu/menu.component';
import { AboutComponent } from './menu/about/about.component';
import { ShopComponent } from './menu/shop/shop.component';
import { JoinComponent } from './menu/join/join.component';
import { AboutDetailsComponent } from './menu/about-details/about-details.component';
//import { BottomTabComponent } from './tabs/bottom-tab/bottom-tab.component';
//import { JoinPageComponent } from './pages/join-page/join-page.component';


//FIX: You want the path to go from OurHistory(the menu option) to OutHistoryPage. Also figure out how to add the menu to the bottom of the pages. 
//     Maybe create an ns-path for the BottomTabBar that can be placed on HTML pages.

const routes: Routes = 
[
  { path: '', redirectTo: '/home/(HistoryOutlet:OurHistory//MerchOutlet:OurMerch//ClubOutlet:OurClub)', pathMatch: 'full' },
  { path: 'home', component: MenuComponent, children:
  [
    { path: 'OurHistory', component: AboutComponent, outlet: 'HistoryOutlet'},
    { path: 'HistoryDetails', component: AboutDetailsComponent, outlet: 'HistoryOutlet' },
    { path: 'OurMerch', component: ShopComponent, outlet: 'MerchOutlet' },
    { path: 'OurClub', component: JoinComponent, outlet: 'ClubOutlet' },

  ]}, // a root route with an empty path. The route that is loaded when our app starts. SHOULD BE LOGO IMAGE!!

]

about-tab.component.html

<ScrollView orientation="vertical" height="500">
    <StackLayout orientation="vertical" backgroundColor="white">
        <page-router-outlet name="HistoryOutlet"></page-router-outlet>
        <Label text="This is Our History" id="ID1"></Label>
        <Button height="50" 
                width="200" 
                backgroundColor="black" 
                text="Who We Are" 
                id="about-button"
                [nsRouterLink]="['/home', { outlets: { HistoryOutlet:[ 'HistoryDetails' ]}} ]">
        </Button>
    </StackLayout>
</ScrollView>

about-details.component.html

<ns-action-bar title="Details"></ns-action-bar>
<StackLayout>
    <Button 
      text="Go Back"
      [nsRouterLink]="['/home', { outlets: { HistoryOutlet: ['OurHistory'] } } ]"
      class="about-details">
    </Button>
</StackLayout>
1
Can you setup a Playground with minimal sample code? - Manoj
Yes, I will do this and post it here when I do - Brian M.

1 Answers

0
votes

I found my solution in the NativeScript Github docs. Under TabView Navigation. I see where I went wrong. I was close, but this answers everything.

https://github.com/NativeScript/docs/blob/6ac877dc3bd551a8e338855e07597ee24358a462/docs/core-concepts/angular-navigation.md