如何使用组件代替离子4 <ion-tab>

时间:2018-12-20 01:20:07

标签: angular ionic-framework

我目前有一些标签,现在仅显示一些文本(标准/肝脏内容)

<ion-content padding class="white-bg">

  <ion-tabs #dosingTabs>

    <ion-tab tab="standard">standard content</ion-tab>
    <ion-tab tab="hepatic">hepatic Content</ion-tab>

    <ion-tab-bar slot="top" [selectedTab]="dosingType">
      <ion-tab-button tab="standard">
        <ion-label>Standard</ion-label>
      </ion-tab-button>
      <ion-tab-button tab="hepatic">
        <ion-label>Hepatic<br>Impairment</ion-label>
      </ion-tab-button>
    </ion-tab-bar>

  </ion-tabs>

</ion-content>

这些标签的内容最终将包含很多标记,因此我创建了一个新组件并尝试:

<ion-tab tab="standard" component="StandardComponent"></ion-tab>

当我进入具有标签的视图时,出现错误:

没有找到StandardComponent的组件工厂。您是否将其添加到@ NgModule.entryComponents中?

所以我将模块调整为在StandardComponent数组中包含entryComponents,但是错误仍然存​​在

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';

import { IonicModule } from '@ionic/angular';

import { CalculatorPage } from './calculator.page';
import { StandardComponent } from '../standard/standard.component';

const routes: Routes = [
  {
    path: '',
    component: CalculatorPage
  }
];

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild(routes)
  ],
  entryComponents: [
    StandardComponent
  ]
})
export class CalculatorPageModule {}

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

以防万一其他人遇到这个问题,我想我找到了解决方案(或至少可以解决)。如果有人可以确认这一点,将会有所帮助。

我的发现是您不能调用这样的模式:

const modal = await this.modalController.create({
  component : FilterPage,
  mode      : "md",
  componentProps: { }
});

选项卡组件中没有可用的“ FilterPage”。如果尝试,将导致显示以下错误:

"Uncaught (in promise): Error: No component factory found for [object Object]. Did you add it to @NgModule.entryComponents?"

将其添加到模块或App模块不能解决此问题,并且此错误消息将不断显示。

解决方案,我发现这很简单,但却花了我很多时间。像这样调用模式:

var modal = this.modalController.create(FilterPage); 
return await modal.present();

我认为Ionic并不是通过组件而是通过Page。

注意:这在Ionic v4表中(ionic(Ionic CLI):4.10.1)

答案 1 :(得分:0)

您还需要将组件添加到声明数组中以进行注册

declarations : [
  StandardComponent
]

答案 2 :(得分:0)

您不能将组件作为@input属性传递给“ ion-tab”。它应该基于路由加载。请参考以下链接,说明“离子标签”的配置。

https://ionicacademy.com/tab-bar-ionic-4/