【问题标题】:Angular Change Component Declarations LocationAngular 更改组件声明位置
【发布时间】:2020-09-15 19:41:47
【问题描述】:

这可能是一个愚蠢的问题,但它就是这样:

在我的 Angular 项目中,我想将我的组件声明从 angular.module.ts 更改为 modules/modules.modules.ts。

为了使我的 src/app 结构看起来像:

src/
   app/
   .  modules/
   .  .  about/...
   .  .  banner/...
   .  .  contact/...
   .  .  portfolio/...
   .  .  services/...
   .  .  testimonial/...
   .  .  modules.module.ts
   .  app-routing.module.ts
   .  app.component.html
   .  app.component.scss
   .  app.component.spec.ts
   .  app.component.ts
   .  app.module.ts

在 Resume 中想要将我所有的组件声明移动到 modules/modules.module.ts

这是我迄今为止最好的尝试:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

// Modules Components
import { BannerComponent } from './banner/banner.component';
import { ServicesComponent } from './services/services.component';
import { PortfolioComponent } from './portfolio/portfolio.component';
import { TestimonialComponent } from './testimonial/testimonial.component';
import { AboutComponent } from './about/about.component';
import { ContactComponent } from './contact/contact.component';

@NgModule({
  imports: [CommonModule],
  declarations: [
    AboutComponent,
    BannerComponent,
    ContactComponent,
    PortfolioComponent,
    ServicesComponent,
    TestimonialComponent,
  ],
  exports: [
    AboutComponent,
    BannerComponent,
    ContactComponent,
    PortfolioComponent,
    ServicesComponent,
    TestimonialComponent,
  ],
})
export class ModulesModule {}

app.module.ts:

// Angular CLI
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

// App Component
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

// Pages Components
import { HomePageComponent } from './pages/home-page/home-page.component';
import { AboutPageComponent } from './pages/about-page/about-page.component';
import { ServicesPageComponent } from './pages/services-page/services-page.component';
import { PortfolioPageComponent } from './pages/portfolio-page/portfolio-page.component';
import { PortfolioSinglePageComponent } from './pages/portfolio-single-page/portfolio-single-page.component';
import { ContactPageComponent } from './pages/contact-page/contact-page.component';

// Modules Components
//import { BannerComponent } from './modules/banner/banner.component';
//import { ServicesComponent } from './modules/services/services.component';
//import { PortfolioComponent } from './modules/portfolio/portfolio.component';
//import { TestimonialComponent } from './modules/testimonial/testimonial.component';
//import { AboutComponent } from './modules/about/about.component';
//import { ContactComponent } from './modules/contact/contact.component';
import { ModulesModule } from './modules/modules.module';

// Angular Material
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from './material/material.module';

// Third Party
import { OwlModule } from 'ngx-owl-carousel';
import { NgxSpinnerModule } from 'ngx-spinner';

// PWA
import { ServiceWorkerModule } from '@angular/service-worker';

// Environment
import { environment } from '../environments/environment';

// Firebase
import { AngularFireModule } from '@angular/fire';
import { AngularFireDatabaseModule } from '@angular/fire/database';

@NgModule({
  declarations: [
    AppComponent,
    HomePageComponent,
    AboutPageComponent,
    ServicesPageComponent,
    ContactPageComponent,
    PortfolioPageComponent,
    PortfolioSinglePageComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    ModulesModule, // here
    BrowserAnimationsModule,
    MaterialModule,
    OwlModule,
    NgxSpinnerModule,
    ServiceWorkerModule.register('ngsw-worker.js', {
      enabled: true, //environment.production,
    }),
    AngularFireModule.initializeApp(environment.firebaseConfig),
    AngularFireDatabaseModule,
  ],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}

请注意,我只是更改名称以简化问题。当声明在 app.module.ts 中出现时,它就可以正常工作了

【问题讨论】:

  • 嗨。您收到哪条错误消息?
  • error,对我来说,它看起来是 angular 试图编译页面而不导入所有导入,或者类似的东西

标签: javascript angular typescript angular-components angular-module


【解决方案1】:

您需要exportModulesModule 中的每个组件。此策略类似于Sharing modules 中描述的策略。此外,您收到的错误似乎是围绕 owl carousel、角度路由器和可能的其他模块的未知元素错误。尝试创建一个SharedModule 来导入/导出这些第三方模块以及任何共享组件,并将其导入到使用它们的其他模块中:

共享:

@NgModule({
 imports:      [CommonModule],
 declarations: [],
 exports:      [CommonModule, OwlModule, RouterModule]
})
export class SharedModule { }

模块:

@NgModule({
  imports: [SharedModule],
  declarations: [
    Component1,
    Component2,
  ],
  exports: [
    Component1,
    Component2,
  ],
})
export class ModulesModule { }

希望对您有所帮助!

【讨论】:

  • 是的,我看到了文档,但我仍然无法执行此更改。我的pages.mudule.ts就是这样,导入所有组件,然后在NgModule里面导入CommonModule,声明所有组件,然后导出。
  • 您是否将每个页面组件添加到PagesModuleexports
  • 我创建了这个结构的一个工作示例,如答案所述:stackblitz.com/edit/angular-ivy-b2jzux。从PagesModule声明和导出,在AppModule中导入PagesModule,从PagesModule使用组件
  • 我更改了问题中的代码,以匹配我当前的代码
  • @Victor 是的,该结构在我创建的示例中有效。你遇到了什么错误?如果您删除其他第三方模块,有什么不同吗?如果仍然存在问题,请更新 example,将其分叉以创建与应用程序中相同的结构。
【解决方案2】:

根据您的错误,您需要:

  • 在 ModulesModule 中导入 RouterModule
  • 在 ModulesModule 中导入 OwlModule

因为我老了,我的视力不是最好的,我可能会错过一些:)

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2023-03-06
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多