如何在app.module.ts离子3 / Angular中导入组件



我创建了一个在离子3

中创建了一个名为"共同头"的组件

现在,我想将其包含在其他页面的顶部,例如主页上的页面等。但是我的问题是,我必须将其包含在每个页面上,然后像在下面给定的代码中一样工作正常。

//login-option-module.ts

import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { LoginOptionPage } from './login-option';
import { ComponentsModule } from '../../components/components.module';
@NgModule({
  declarations: [
    LoginOptionPage,
  ],
  imports: [
    ComponentsModule,
    IonicPageModule.forChild(LoginOptionPage),
  ],
  exports: [
    ComponentsModule
 ]
})
export class LoginOptionPageModule {}

,但我想从我的app.module.ts导入此"共同头"组件。这样它将在我的所有页面中自动存在

所以我将其导入我的app.module.ts文件以下代码:

//app.module.ts

import { HomePage } from '../pages/home/home';
import { ServiceProvider } from '../providers/service/service';
import { Tab1Page } from '../pages/tab1/tab1';
import { Tab2Page } from '../pages/tab2/tab2';
import { CandidateProvider } from '../providers/candidate/candidate';
import { ComponentsModule } from '../components/components.module';

@NgModule({
  declarations: [
    MyApp,
    HomePage,
  ],
  imports: [
    BrowserModule,HttpModule,ComponentsModule,
    IonicModule.forRoot(MyApp),
  ],
  exports: [
    ComponentsModule
 ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage
  ],
  providers: [ ServiceProvider,
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    CandidateProvider
  ]
})
export class AppModule {}

并从我的登录选项模块中删除以下代码。TS

import { ComponentsModule } from '../../components/components.module'; imports: [ ComponentsModule ], exports: [ ComponentsModule ]

执行此操作后,我要低于错误:

Error: Uncaught (in promise): Error: Template parse errors:
'common-header' is not a known element:
1. If 'common-header' is an Angular component, then verify that it is part of this module.
2. If 'common-header' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. ("<ion-header>
    [ERROR ->]<common-header ></common-header>
  </ion-header>
"): ng:///LoginOptionPageModule/LoginOptionPage.html@1:4

以下是我的其他代码:

//common-header.html

<ion-navbar hideBackButton>
    <nav>
      <img class="logo left" src="assets/imgs/logo-icon-rev.png" />
      <h1 class="slogan left">hoteljobber.com</h1>
    </nav>
    <a style="color:aqua; float:right" on-click="homeClick()">Back to home</a>
  </ion-navbar>

//common-header.ts

import { Component,Input  } from '@angular/core';
import { NavController } from 'ionic-angular';
import { HomePage } from '../../pages/home/home';

@Component({
  selector: 'common-header',
  templateUrl: 'common-header.html'
})
  export class CommonHeaderComponent {
    header_data: any;
  constructor(public navCtrl: NavController) {}
  @Input()
  set header(header_data: any) {
    this.header_data=header_data;
  }
  get header() {
    return this.header_data;
  }
  homeClick() {
    this.navCtrl.setRoot(HomePage);
  }
}

//login-option.html

 <ion-header>
    <common-header ></common-header>
  </ion-header>

<ion-content class="login-content" >
    page login
  </ion-content>

有什么方法可以解决我的问题,我从3天开始就在搜索它,但直到还没有找到任何解决方案。

为什么使用ComponentsModule?包含组件的模块是所谓的特征模块。如果您需要多个模块中的这些组件,则也称为共享模块。您的LoginOptionModule似乎是A 功能的一个很好的描述。但是ComponentsModule呢?组件听起来不像一个功能。我认为这只是清理您的结构的模块。但是,您认为要清理应用程序结构是必要或有用的?

考虑您在其中声明的每个组件是在AppModuleLoginOptionModule中声明是否更好。两个模块中是否需要组件?

如果它共享,或者您绝对愿意保留ComponentsModule,则应该能够在AppModuleLoginOptionModule中导入它,而不会在其中一个模块中导出。在ComponentsModule本身中,声明并导出您的组件。

希望这有助于解决您的问题。欢呼!

一些样式建议

  • 重命名 login-option-module.ts to login-option.module.ts
  • 在您的AppModule中,所有其他模块都会给出每个声明,imports-等。数组条目一条新行。
  • 始终为您的服务命名有用的Service.service.ts

在结论名称中,所有Angular Files as name.service.ts name.module.ts name.pipe.ts 等。这导致了非常清晰的应用结构。

您的代码很难阅读。下次,您至少可以尝试使用语法突出显示,通过将以下内容放在代码的前面,而无需缩进,然后是空行。

<!-- language: lang-html -->
<!-- language: javascript -->

还考虑什么对解决您的问题很重要。模板文件绝对不是。

相关内容

  • 没有找到相关文章

最新更新