当前位置: 首页 > 知识库问答 >
问题:

角度-跨多个模块使用组件

鲁淇
2023-03-14

我正在使用什么

我想做的是

  • 我有一个加载组件,我想在多个模块中重用

我做了什么

>

  • 我创建了一个名为“加载覆盖”的新模块

    在此模块中,我导出覆盖组件

    我将此模块添加到app.module

    将组件添加到多个模块时,我收到以下错误:

    类型加载覆盖组件是两个模块声明的一部分:加载覆盖模块和项目模块!请考虑将加载覆盖组件移动到导入加载覆盖模块和项目模块的更高模块。您还可以创建一个新的NgMoules,导出并包含加载覆盖组件,然后在加载覆盖模块和项目模块中导入该Ng模块。

    • 我尝试将其从 app.module 中删除并将其导入我需要的其他模块中,但没有太多运气。我一定错过了一些明显的。

    覆盖模块

    // Modules
    import { NgModule } from '@angular/core';
    
    // Components
    import { LoadingOverlayComponent } from './loading-overlay.component';
    
    
    
    @NgModule({
      declarations: [
        LoadingOverlayComponent,
      ],
    
      imports: [
    
      ],
    
      exports: [
        LoadingOverlayComponent
      ],
    
      providers: [ ],
    
    })
    
    export class LoadingOverlayModule { }
    

    应用模块

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    import { AppComponent } from './app.component';
    
    // Routing
    import { AppRouting } from './routing/app-routing';
    
    // Modules
    import { ProjectsModule } from './projects/projects.module';
    import { UserModule } from './user/user.module';
    import { LoadingOverlayModule } from './loading-overlay/loading-overlay.module';
    
    
    // Services / Providers
    import { AuthService } from './user/auth.service'
    
    
    
    
    
    @NgModule({
      declarations: [
        AppComponent,
      ],
      imports: [
        BrowserModule,
        AppRouting,
        LoadingOverlayModule  
      ],
      providers: [
        AuthService,
    
      ],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    项目模块

    // Modules
    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { RouterModule } from '@angular/router';
    import { LoadingOverlayModule } from '../loading-overlay/loading-overlay.module';
    
    import { LoadingOverlayComponent } from '../loading-overlay/loading-overlay.component';
    
    
    
    
    
    
    @NgModule({
      declarations: [
    
        LoadingOverlayComponent
      ],
    
      imports: [
        CommonModule,
        RouterModule,
    
        LoadingOverlayModule
      ],
    
      providers: [ ],
    
    })
    
    export class ProjectsModule { }
    

    任何帮助指出我愚蠢地错过了什么,我将不胜感激。

  • 共有3个答案

    姬选
    2023-03-14

    对于那些想寻找和我相似的概括答案的人来说:

    1. 从app模块中删除已经创建的组件
    2. 创建新模块,例如SharedMoules
    3. 导入和导出已创建的组件
    4. 将模块导入到已经需要组件的模块中

    我想在整个项目中共享一些组件。我创建了一个名为ComponentsModule的新模块,如下所示:

         @NgModule({
          declarations: [
            BannerComponent,
            ImageAndTextComponent,
            InfoAndImageComponent
          ],
          imports: [
            CommonModule
          ],
          exports: [
            BannerComponent,
            
          ]
        })
        export class ComponentsModule { }
    

    我想在< code>UtviklingComponent中使用< code>BannerComponent,该组件是< code>UtviklingModule的子组件。您可以在下面看到< code>UtviklingModule的代码

       @NgModule({
          declarations: [
            UtviklingComponent,
          ],
          imports: [
            CommonModule,
            ComponentsModule,
            RouterModule.forRoot([
              {path: 'utvikling', component: UtviklingComponent,data: {animation: "UtviklingPage"}},
            ])
          ]
        })
        export class UtviklingModule { }
    
    柴辰阳
    2023-03-14

    LoadingOverlayMoules是共享模块。它有自己的组件。现在要使用它的组件,您需要将LoadingOverlayMoules导入Project模块。从项目模块的声明中删除LoadingOverlayComponent。

    您将需要另一个组件(例如ProjectComponent)来进行项目模块声明。当共享模块导入到项目模块中时,您可以使用选择器直接使用ProjectComponent模板中的覆盖组件。希望这有帮助。

    谷梁鸣
    2023-03-14

    删除:

    从< code>AppModule中< code >加载OverlayModule

    从项目加载覆盖组件模块

    并且:

    导入加载覆盖模块需要的地方

     类似资料:
    • 在angular 2中,假设我有一条使用组件的路线: 现在,如果我直接导入组件,这就可以了: 但是我应该如何导入模块呢? 这不起作用,因为不是在模块文件中定义的,而是在组件文件中定义的。 以便组件加载模块的所有可用导入和声明? 根据@HristoKolev的建议,我在模块中添加了以下内容: 这允许路由从模块中查看基本表单组件。 但是,BasicForm组件似乎没有看到从NgMoules导入。特别是

    • 问题内容: 我有一个具有以下结构的小型python项目- 我计划使用默认的日志记录模块将消息打印到stdout和日志文件。要使用日志记录模块,需要进行一些初始化- 目前,在开始记录消息之前,我会在每个模块中执行此初始化。是否可以只在一个位置执行一次初始化,以便通过在整个项目中记录日志来重复使用相同的设置? 问题答案: 最佳实践是在每个模块中都定义一个记录器,如下所示: 在模块顶部附近,然后在模块中

    • 问题内容: 我是整个浏览器新手。我一直在尝试使用browserify + reactify + gulp来转换,缩小和组合一个React应用程序。只要我有一个单身,一切正常。由于我有多个共享组件,因此我实际上是托管在同一文件中并在项目中重复使用,因此我想导出多个组件。我试过一个数组: 并且还尝试了具有多个属性的对象: 并且还尝试对对象中的调用进行内联,但这无济于事。 有没有办法做到这一点,还是我必

    • 有人帮忙吗? 我清除了节点模块并:

    • 问题内容: 我知道这个问题已经被问过很多次了,而且我知道在大多数情况下人们会丢失文件。 我遇到了同样的问题,试图在模块上测试工厂。不幸的是,我一直遇到测试方面的问题(为什么要使用Angular,为什么要假设和对象?),未定义模块的状态。我很茫然。我也尝试过使用angular.mocks.module,但随后收到一条消息,提示未定义Angular。我究竟做错了什么? 值得注意的是,我正在使用gulp

    • 我一直在看视频和阅读文章,但这篇具体的文章让我很困惑,文章开头写道 Angular中的应用程序遵循模块化结构。Angular应用程序将包含许多模块,每个模块都专用于单一用途。通常,模块是一组内聚的代码,与其他模块集成以运行Angular应用程序。 模块从其代码中导出一些类、函数和值。组件是Angular的基本块,多个组件将构成您的应用程序。 一个模块可以是另一个模块的库。例如,作为主角度库模块的