Ошибка: «заголовок приложения» не является известным элементом: Angular 2

Ниже моя структура папок.

    app
    - common
         - header
           header.component.css
           header.component.html
           header.component.ts
        - footer
           footer.component.css
           footer.component.html
           footer.component.ts
    - index
      index.component.css
      index.component.ts
      index.component.html
      index.module.ts
   - lessons
     lesson1(another folder)
     lesson2(folder)
     lesson.module.ts   

    app.component.css
    app.component.ts
    app.component.html
    app.module.ts

Я импортировал компонент верхнего и нижнего колонтитула, index.module, урок.модуль в app.module и использовал

<app-header></app-header>
<app-navbar></app-navbar>

в index.component.html, урок1.компонент.html, урок2.компонент.html.

Но я получаю, что «заголовок приложения» не является известной ошибкой элемента. Может ли кто-нибудь помочь мне решить эту ошибку?

Это работает хорошо, если я включу компоненты верхнего и нижнего колонтитула непосредственно в index.module.ts.

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { RouterModule, Routes } from '@angular/router';
import * as $ from 'jquery';

import { AppComponent } from './app.component';

import { HeaderComponent } from './common/header/header.component';
import { FooterComponent } from './common/footer/footer.component';

import { IndexModule } from './index/index.module';
import { LessonModule } from './index/lesson.module';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    RouterModule,
    IndexModule,
  ],

  declarations: [
    AppComponent,
    HeaderComponent,
    FooterComponent,
  ],

  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {

 }

index.component.html

<app-header></app-header>   <app-navbar></app-navbar>

index.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { IndexComponent } from './index.component';
import { IndexRoutingModule } from './index-routing.module';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    HttpModule,
    IndexRoutingModule
  ],
  declarations: [
    IndexComponent
  ]
})

export class IndexModule { }

lesson.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';

import { Lesson1Component } from './lesson1.component';
import { Lesson2Component } from './lesson2.component';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    HttpModule,
    IndexRoutingModule
  ],
  declarations: [
    IndexComponent
  ]
})

export class IndexModule { }

person Green Computers    schedule 05.09.2017    source источник


Ответы (2)


какой модуль начальной загрузки загружает ваше приложение?

если вы хотите объявить компоненты в одном модуле и использовать их в другом модуле, вам нужно export их, чтобы при импорте модуля в другой модуль он понимал, что они будут использоваться из другого модуля

поэтому в вашем app.module.ts объявите, а также экспортируйте их, чтобы индексный модуль понял, что это из других модулей.

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    RouterModule,
    IndexModule,
  ],

  declarations: [
    AppComponent,
    HeaderComponent,
    FooterComponent,
  ],

exports: [
      HeaderComponent,
    FooterComponent,
],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {

 }

а теперь импортируйте app.module в свой индексный модуль

@NgModule({
  imports: [
    AppModule,
    CommonModule,
    FormsModule,
    HttpModule,
    IndexRoutingModule
  ],
  declarations: [
    IndexComponent
  ]
})

export class IndexModule { }

Я бы сказал, сделайте свой модуль приложения как загрузочный модуль, создайте общий модуль и объявите все компоненты, каналы, директивы и экспортируйте их. и в вашем модуле приложения импортируйте общий модуль и используйте все компоненты.

person Aniruddha Das    schedule 05.09.2017

Вы импортировали и объявили компонент заголовка в app.module, но используете его в index.module, где они не «распознаются».

Переместите их в index.module

import { HeaderComponent } from './common/header/header.component';
...
declarations: [
    HeaderComponent,
....
person Vega    schedule 05.09.2017
comment
Это будет работать. Но компоненты верхнего и нижнего колонтитула являются общими для всех модулей. Если я добавлю модуль уроков в будущем, он будет импортирован из-за ошибки «header.component» как в модуль индекса, так и в модуль уроков. Пожалуйста, переместите это в более высокий модуль, где вы импортировали индекс и модуль уроков. - person Green Computers; 05.09.2017
comment
Создайте новый общий модуль со всеми общими компонентами, которые вы будете импортировать и объявлять там и только там. Затем импортируйте этот модуль в индексный модуль, модуль приложения и т. д. - person Vega; 05.09.2017
comment
Нужно ли мне создавать этот общий модуль в общей папке и импортировать его в app.module? - person Green Computers; 05.09.2017
comment
Где его разместить - это личный выбор :) но, вероятно, это хороший выбор. Если вам это нужно в модуле приложения, да, в противном случае оставьте это для модулей, которые делают - person Vega; 05.09.2017
comment
Я импортировал компоненты «заголовок» и «нижний колонтитул» в common.module (помещен в общую папку) и импортировал common.module в index.module. Но все равно получаю ту же ошибку.. :( - person Green Computers; 05.09.2017
comment
Могу ли я поделиться своим экраном, если у вас есть teamviewer. - person Green Computers; 05.09.2017
comment
Я забыл экспортировать компоненты. Теперь это работает. Большое вам спасибо за вашу помощь!! - person Green Computers; 05.09.2017
comment
@Green Computers, я думал, что ответил на твой вопрос. Что случилось? - person Vega; 12.09.2017