【问题标题】:Replacing Component in Tabs Routing Angular Ionic替换选项卡路由角离子中的组件
【发布时间】:2020-10-09 10:46:46
【问题描述】:

在通用离子标签模板中,我试图用一个组件替换标签 2。尽管导入了 PeopleComponent,但我仍然收到此错误:

我的错误:

ERROR Error: Uncaught (in promise): Error: Component PeopleComponent is not part 
of any NgModule or the module has not been imported into your module.
Error: Component PeopleComponent is not part of any NgModule or the module has 
not been imported into your module.

People 组件非常简单,不会出错。我曾尝试从其中一个或另一个中删除导入,但这不起作用。不知道该怎么办。

应用模块:

...
@NgModule({
  declarations: [
  ...
  PeopleComponent,
]
...

标签路由模块:

import { PeopleComponent } from './../path/people/people.component';
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { TabsPage } from './tabs.page';

const routes: Routes = [
 {
    path: 'tabs',
    component: TabsPage,
    children: [
 {
    path: 'tab1',
    loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule)
  },
  {
    path: 'tab2',
    component: PeopleComponent
    // loadChildren: () => import('../tab2/tab2.module').then(m => m.Tab2PageModule)
  },
  {
    path: 'tab3',
    loadChildren: () => import('../tab3/tab3.module').then(m => m.Tab3PageModule)
  },
  {
    path: '',
    redirectTo: '/tabs/tab1',
    pathMatch: 'full'
  }
]
},
{
   path: '',
   redirectTo: '/tabs/tab1',
   pathMatch: 'full'
}
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})

导出类 TabsPageRoutingModule {}

标签模块:

import { PeopleComponent } from './../path/people/people.component';
import { IonicModule } from '@ionic/angular';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';

import { TabsPageRoutingModule } from './tabs-routing.module';

import { TabsPage } from './tabs.page';

@NgModule({
  imports: [
    IonicModule,
    CommonModule,
    FormsModule,
    TabsPageRoutingModule,
  ],
  declarations: [TabsPage]
})
export class TabsPageModule {}

【问题讨论】:

  • 在标签模块中将 PeopleComponent 添加到导入中。

标签: angular ionic-framework routes angular2-routing


【解决方案1】:

编辑:

与其执行下面提到的操作,不如删除 ionic tabs starter 模板创建的不需要的模块。

这是我所做的commit,它删除了不必要的模块并使应用程序更简单。

您可以对您的应用程序执行类似的操作并使其更简单。

旧答案

您必须在TabsPageModuledeclarations 中添加PeopleComponent,而不是AppModule

问题是TabsPageModule 不知道PeopleComponent,因为它已在AppModule 中声明。除非您在 AppModule 中导出 PeopleComponent 并在 TabsPageModule 中导入 AppModule,否则 PeopleComponent 将无法使用。

不要像第一行提到的那样做所有这些,只需从 AppModule 声明中删除 PeopleComponent 并将其添加到 TabsPageModule 中的声明中。

【讨论】:

  • 感谢您的回答,我选择了第二个选项,因为我在其他地方使用 PeopleComponent。我收到了这个错误:错误错误:未捕获(承诺):错误:RouterModule.forRoot()调用了两次。延迟加载的模块应该使用 RouterModule.forChild() 代替。错误:RouterModule.forRoot() 调用了两次。延迟加载的模块应该使用 RouterModule.forChild() 代替。
  • Tabs starter 模板的问题在于,它添加了不必要的模块。 TabsPage 和单个选项卡不需要模块。最好去掉那些模块,直接在父路由模块中声明选项卡和路由。
  • @DarrowHartman 我已经更新了答案,以展示如何编辑当前结构并删除不必要的模块。检查这是否可以帮助您并解决您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 2016-07-30
  • 2018-11-28
  • 1970-01-01
  • 2021-10-14
  • 2020-10-09
  • 2020-01-15
相关资源
最近更新 更多