Angular не видит селектор моего компонента

#javascript #angular

#javascript #angular

Вопрос:

Я создал компонент (слайдер), и я не могу видеть его в другом файле (главная страница).

Если ‘app-slider’ является компонентом Angular, то убедитесь, что он является частью этого модуля.

slider.component.ts, где мой app-slider селектор

 @Component({
  selector: 'app-slider',
  templateUrl: './slider.component.html',
  styleUrls: ['./slider.component.scss']
})
export class SliderComponent implements OnInit {
  

components.module.ts модуль declatations/export , в котором я SliderComponent

 import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SliderComponent } from './slider/slider.component';

import { SharedModule } from '../shared/shared.module';

    @NgModule({
      imports: [
        CommonModule,
        SharedModule.forRoot()
      ],
      declarations: [SliderComponent],
      exports: [SliderComponent]
    
    })
    export class ComponentsModule { }
  

main-page.component.html где я использую <app-slider></app-slider>

 <div class="content">
    <section class="main">
        <div class="container">
            <app-slider></app-slider>
            ....
  

PagesМодуль, где мой MainPageComponent

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

import { SharedModule } from '../../shared/shared.module';

import { MainPageComponent } from './main-page/main-page.component';




@NgModule({
  imports: [
    CommonModule,
    SharedModule.forRoot()
  ],
  declarations: [MainPageComponent],

})
export class PagesModule { }
  

App.module.ts с обоими модулями

 import { ComponentsModule } from './components/components.module';
import { PagesModule } from './routes/pages/pages.module';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    CommonModule,
    ComponentsModule,
    PagesModule,
...
  

UPD 1
Я удалил ComponentsModule и PagesModule из App.modules и импортировал ComponentsModule , PagesModule но проблема та же. Пожалуйста, проверьте ссылку

PagesМодуль

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

import { SharedModule } from '../../shared/shared.module';

import { ComponentsModule } from '../../components/components.module';
import { MainPageComponent } from './main-page/main-page.component';


    @NgModule({
      imports: [
        CommonModule,
        ComponentsModule,
        SharedModule.forRoot()
      ],
      declarations: [MainPageComponent],
    
    })
    export class PagesModule { }
  

App.module.ts после обновления

 import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';

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

import { RoutesModule } from './routes/routes.module';
import { SharedModule } from './shared/shared.module';
import { LayoutModule } from './layout/layout.module';
import { CoreModule } from './core/core.module';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    CommonModule,
    LayoutModule,
    RoutesModule,
    SharedModule.forRoot(),
    CoreModule,
    BrowserModule,

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

Ответ №1:

Ваш ComponentsModule должен быть импортирован не в корневом модуле вашего приложения ( AppModule ), а в модулях, которые его фактически используют. В вашем случае PagesModule следует импортировать ComponentsModule .

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

Комментарии:

1. спасибо, если я использую <app-layout> в app.component.html тогда я могу поместить LayoutModule в App.modules.ts , верно?

2. Конечно, вы можете использовать компонент в его собственном модуле

3. Я обновил файл, но проблема та же:-( . UPD 1 в моем вопросе

4. Вы перезапустили ng serve ?

5. да, это сбивает меня с толку, так как <app-layout> в App.component.html все в порядке, так как модуль был импортирован в App.module. То же самое для PagesModule не работает. Я чувствую, что я что-то пропустил