无法将组件加载到页面中 - Angular 4/Ionic 3

Posted

技术标签:

【中文标题】无法将组件加载到页面中 - Angular 4/Ionic 3【英文标题】:Not able to load component into page - Angular 4/Ionic 3 【发布时间】:2018-06-17 02:52:59 【问题描述】:

页面上显示一个按钮。但是,当用户选择按钮时,子组件会出现,但会出现以下错误 - 错误:未捕获(在承诺中):错误:未找到 ModalComponent 的组件工厂。你把它添加到@NgModule.entryComponents 了吗?

我设置的结构如下,这是与 Ionic 3 结合使用的 -

app (folder) 
 - app.module
 - app.component

components (folder)
 - modal-component.ts

pages (folder)
 - pageOne (folder)
   - pageOne.module
   - pageOne.ts

我把modal组件放在pageOne.module中

pageOne.module

@NgModule(
    declarations: [
        pageOne,
        modalComponent

    ],
    entryComponents: [
        modalComponent
    ],
    imports: [
        IonicPageModule.forChild(pageOne),
    ],
    exports: [
        pageOne,

    ]
)
export class pageOneModule 

pageOne.ts

@IonicPage()

@Component(
  selector: 'pageOne',
  templateUrl: 'pageOne.html',

)
export class pageOne 

【问题讨论】:

你是否尝试使用pageOne.ts中的任何组件 你是为延迟加载模块做的吗? 是的,我都在做 尝试删除entryComponents: [ modalComponent ], 得到同样的错误 【参考方案1】:

你在引导你的模块吗?

把它放在会加载的地方

import  platformBrowserDynamic  from '@angular/platform-browser-dynamic';
import  pageOneModule  from './pages/pageOne/pageOne.module';

document.addEventListener('DOMContentLoaded', () => 
  platformBrowserDynamic().bootstrapModule(pageOneModule)
  .catch(err => console.log(err));
);

我还建议使用 angular cli,它会为你做这种事情。

【讨论】:

仍然出现同样的错误。把它放在我的 app.module 中 我认为问题在于它没有被加载,如果你在 catch 之后放置控制台日志,我认为它不会被调用。我建议使用 cli 创建一个空项目,以便您了解 ppl 如何构建 angular 2 应用程序。我认为您在入口点中缺少的主要思想,这通常是在 .angular-cli.json (如果使用 cli)、 webpack-config.js (如果使用 webpack)中设置的,或者您的模块加载器会这样做。不知道ionic有没有自己的方法,我没用过。【参考方案2】:

您的页面模块设置不适合延迟加载。我不确定究竟是什么导致了确切的错误,但是当您延迟加载时,您不会导出或声明入口组件。将您的页面模块更改为:

@NgModule(
    declarations: [
        pageOne,
        modalComponent ],
    imports: [ IonicPageModule.forChild(pageOne) ]
)
export class pageOneModule 

现在,您没有发布您的模态组件代码,所以我不确定它是否是您制作的。如果它类似于 Material2 Modals,则需要在 entryComponents 中。此外,您的导航堆栈现在应该使用页面的字符串名称,而不是导入以确保您正在加载相同的对象而不是克隆它。

【讨论】:

如果您查看我上面的评论,我删除了条目组件,并且完全按照您当前提到的方式完成了操作。我创建了模态组件代码。 你还在导出pageOne吗? 是的,不要那样做。如果您延迟加载模块,则对 IonicPageModule 的调用会将其注册到 Ionic。我的猜测是您正在导出它,然后将其导入您的主应用程序中,因此它是一个单例。虽然没有看到 pageOne 和您的 app.ts 的 html,但我并不完全确定

以上是关于无法将组件加载到页面中 - Angular 4/Ionic 3的主要内容,如果未能解决你的问题,请参考以下文章

当页面在 Angular 10 中完全加载时调用组件函数

Angular 远程加载模块不会将入口组件加载到视图中

Angular6路由器导航到共享相同组件的多个子路由

如何将动态外部组件加载到 Angular 应用程序中

Angular 中的异步数据处理

在每个组件完成加载后如何在 Angular 2 中运行 jquery 函数