Ionic 4 组件未在导航中呈现

Ionic 4 component is not rendering on navigation

我正在使用 Ionic 4 和 Angular 8 我的应用程序底部有以下选项卡,我想通过单击选项卡从论坛和消息导航到与选项卡关联的不同组件。 但问题是页面不会在单击选项卡时呈现,但如果我刷新页面,则导航工作正常。 我不知道我在这里错过了什么。

制表符HTML

<ion-tabs>
  <ion-tab-bar slot="bottom">
    <ion-tab-button selected tab="food" (pointerup)="changeItems('food')">
      <ion-icon name="pizza"></ion-icon>
      <ion-label>Food</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="non-food" (pointerup)="changeItems('non-food')">
      <ion-icon name="basket"></ion-icon>
      <ion-label>Non-Food</ion-label>
    </ion-tab-button>
    <ion-tab-button class="add-circle" tab="createListing" (pointerup)="routeTo('createListing')">
      <ion-icon name="add-circle"></ion-icon>
    </ion-tab-button>
    <ion-tab-button tab="forum" (pointerup)="routeTo('forum')">
      <ion-icon name="folder"></ion-icon>
      <ion-label>Forum</ion-label>
    </ion-tab-button>
    <ion-tab-button tab="messages" (pointerup)="routeTo('messages')">
      <ion-icon name="chatboxes"></ion-icon>
      <ion-label>Messages</ion-label>
    </ion-tab-button>
  </ion-tab-bar>
</ion-tabs>

routesTo('messages') 和 routesTo('forum') 在 TS 文件中。

routeTo(route: string){
    this.navCtrl.navigateForward(`sharing/${route}`);
  }

我在 LandingPageModule 中有一个登录页面,从那里我直接路由到 'sharing/home',这是 'sharing'

的子路由

有关更多信息,我有基本路由模块:

const routes: Routes = [
  { path: '', redirectTo: 'landing', pathMatch: 'full' },
  { path: 'landing', loadChildren: () => import('./landing/landing.module').then(mod=> mod.LandingPageModule) },
  { path: 'sharing', loadChildren: () => import('./sharing/sharing.module').then(mod=> mod.SharingModule)  }
];
@NgModule({
  imports: [
    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

共享模块的路由如下:

RouterModule.forChild([
      {
        path: '',
        component: ShareLayoutComponent,
        children:[{
          path: 'home',
          component: HomeComponent
        },
        {
          path: 'forum',
          component: ForumComponent
        },
        {
          path: 'messages',
          component: MessageComponent
        }]
}])

您不会尝试访问通过延迟加载加载的组件吗?因为当您刷新页面时,它们加载得很好。

尝试更改:

<ion-tab-button tab="messages" (pointerup)="routeTo('messages')">
   <ion-icon name="chatboxes"></ion-icon>
   <ion-label>Messages</ion-label>
</ion-tab-button>

收件人:

<ion-tab-button tab="messages">
   <ion-icon name="chatboxes"></ion-icon>
   <ion-label>Messages</ion-label>
</ion-tab-button>

并检查包含这些组件的当前模块的路由

示例:

const routes: Routes = [
  {
    path: 'tabs',
    component: TabsPage,
    children: [
      {
        path: 'messages',
        children: [
          {
            path: '',
            loadChildren: '../messages/messages.module#MessagesModule'
          }
        ]
      }
    ]
  }
];
  • 注意:如果从 Ionic 3 迁移,请注意一些熟悉的 Ionic 导航元素在版本 4 中已被弃用。虽然它们可以工作,但不建议我t 使用 NavController 或 ion-nav。

改用 angular 路由器:

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

@Component({ ... })
export class HomePage {
  constructor(private router: Router) {}

  routeTo(route: string){
    this.router.navigateByUrl(`sharing/${route}`);
    this.navCtrl.navigateForward(`sharing/${route}`);
  }
}

此致。

我找到了解决方案。这个答案适用于那些面临同样问题的人。 只需在每个标记页面或分隔的 HTML 中添加 'ion-content'。 例如,表单 component ABCcomponent XYZ 将所有标记保留在 ion-content 中。

<ion-content
  <!--Your HTML goes here-->
</ion-content>

有关 Ionic 4 中选项卡的其他详细信息:

Ionic 4 对选项卡进行了一些更改,这些更改改变了多年来的工作方式。 现在您可以像使用按钮一样使用选项卡(它们不会仅仅因为它们是选项卡就强行路由您的应用程序) 我已经从选项卡中删除了选项卡属性(这是 Ionic 正式提供的功能)。 会有什么帮助?您将了解何时路由延迟加载路由或 foodnon-food 不是单独页面但它们只是过滤 home page 上具有所有逻辑的一些内容的场景。

<ion-tabs>
  <ion-tab-bar slot="bottom">
    <ion-tab-button selected (pointerup)="changeItems('food')">
      <ion-icon name="pizza"></ion-icon>
      <ion-label>Food</ion-label>
    </ion-tab-button>
    <ion-tab-button (pointerup)="changeItems('non-food')">
      <ion-icon name="basket"></ion-icon>
      <ion-label>Non-Food</ion-label>
    </ion-tab-button>
    <ion-tab-button class="add-circle" (pointerup)="routeTo('createListing')">
      <ion-icon name="add-circle"></ion-icon>
    </ion-tab-button>
    <ion-tab-button (pointerup)="routeTo('forum')">
      <ion-icon name="folder"></ion-icon>
      <ion-label>Forum</ion-label>
    </ion-tab-button>
    <ion-tab-button (pointerup)="routeTo('messages')">
      <ion-icon name="chatboxes"></ion-icon>
      <ion-label>Messages</ion-label>
    </ion-tab-button>
  </ion-tab-bar>
</ion-tabs>

现在上面只是看起来像标签的按钮。 通过使用它们,您不必担心同名路由。只需单击您的选项卡即可路由到不同的组件。