'<selector>'가 Angular 구성 요소 인 경우이 모듈의 일부인지 확인하십시오.


132

저는 Angular2에서 처음입니다. 구성 요소를 만들려고했지만 오류가 표시됩니다.

이것은 app.component.ts파일입니다.

import { Component } from '@angular/core';
import { MyComponentComponent } from './my-component.component';

@Component({
  selector: 'my-app',
  template: `
    <h1>Hello {{name}}</h1>
    <h4>Something</h4>
    <my-component></my-component>
  `,
  directives: [MyComponentComponent]
})
export class AppComponent { name = 'Sam' }

이것이 제가 만들고 싶은 구성 요소입니다.

import { Component } from '@angular/core';

@Component({
selector: 'my-component',
template: `
    <p>This is my article</p>
`
})

export class MyComponentComponent {

}

두 가지 오류 표시 :

  1. 경우 my-component각도 성분이고, 다음이 모듈의 일부임을 확인.
  2. 경우 my-component웹 구성 요소 인 다음 추가 CUSTOM_ELEMENTS_SCHEMA받는 사람 @NgModule.schemas이 메시지를 표시하기 위해이 구성 요소의.

도와주세요.

답변:


152

MyComponentComponent있어야합니다 MyComponentModule.

그리고에서는 "내보내기"안에를 MyComponentModule배치해야합니다 MyComponentComponent.

이와 같은 것은 아래 코드를 참조하십시오.

@NgModule({
   imports: [],
   exports: [MyComponentComponent],
   declarations: [MyComponentComponent],
   providers: [],
})

export class MyComponentModule {
}

및 장소 MyComponentModule에서을 importsapp.module.ts이 같은 (아래 코드 참조).

import { MyComponentModule } from 'your/file/path';

@NgModule({
   imports: [MyComponentModule]
   declarations: [AppComponent],
   providers: [],
   bootstrap: [AppComponent]
})

export class AppModule {}

이렇게하면 이제 앱에서 구성 요소의 선택기를 인식 할 수 있습니다.

https://angular-2-training-book.rangle.io/handout/modules/feature-modules.html 에서 자세히 알아볼 수 있습니다.

건배!


10
여전히 문제가있는 경우 구성 요소의 .ts 파일에 선언 된 선택기를 확인하는 것을 잊지 마십시오. 부모의 html 파일에 구성 요소를 배치 할 때 html 코드에 "app-"을 추가하는 것을 잊었을 수 있습니다.
Jared

2
@Input 이름이 잘못되어이 오류가 발생했습니다. 매우 오해의 소지가 있으므로 문제를 해결하는 동안 구성 요소 태그의 입력을 제거하십시오.
Ben Racicot

나는 여전히 이것에 문제가 있습니다. 각도 재질 / 라디오에서 MatRadioModule을 가져오고 있으며 해당 모듈의 지시문에서이 오류가 발생합니다.
Souritra Das Gupta 2010

1
이것은 최신 버전의 Angular에서 더 이상 유효하지 않습니다 (v.8에서 테스트했습니다)
Dani

22

아마도 이것은 html태그 구성 요소의 이름입니다.

당신은에서 사용하는 html이 같은<mycomponent></mycomponent>

이것을 사용해야합니다 <app-mycomponent></app-mycomponent>


9
html태그의 이름은 selector속성을 결정 합니다. 이 경우는 my-component입니다.
Tomasz Jakub Rup

20

당신은 당신 app.module.ts처럼 그것을 가져오고 지시어 비트를 제거하십시오 :-

@NgModule({
    bootstrap: [AppComponent],
    imports: [MyComponentModule],// or whatever the name of the module is that declares your component.

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

당신 MyComponentModule은 다음과 같아야합니다 :-

@NgModule({
    imports: [],
    exports: [MyComponentComponent],
    declarations: [MyComponentComponent],
    providers: [],
})
export class MyComponentModule {
}

2
당신에 대해 잊어exports
토마스 야쿱 RUP를에게

1
타사 각도 구성 요소를 가져오고 내보낼 수있어 도움이되었습니다. 감사합니다
하기 Shubham은 아 로라

8

파일 이름 에서 선택기를 확인하십시오.

다양한 html 파일에서 태그를 사용하면

<my-first-component></my-first-component>

해야한다

<app-my-first-component></app-my-first-component>

@Component({
  selector: 'app-my-first-component',
  templateUrl: './my-first-component.component.html',
  styleUrls: ['./my-first-component.component.scss']
})

4

필자의 경우 하위 구성 요소를 사용하는 구성 요소에 대한 단위 테스트를 작성하고 해당 하위 구성 요소가 템플릿에 있는지 확인하는 테스트를 작성했습니다.

it('should include the interview selection subview', () => {
    expect(fixture.debugElement.query(By.css('app-interview')))
    .toBeTruthy()  
  }); 

오류가 발생하지 않았지만 경고가 표시됩니다.

경고 : ''app-interview '는 알려진 요소가 아닙니다.

  1. 'app-interview'가 Angular 구성 요소 인 경우이 모듈의 일부인지 확인합니다. 경고 : ''app-interview '는 알려진 요소가 아닙니다.
  2. 'app-interview'가 Angular 구성 요소 인 경우이 모듈의 일부인지 확인합니다.
  3. 'app-interview'가 웹 구성 요소 인 경우이 메시지를 표시하지 않으려면이 구성 요소의 '@ NgModule.schemas'에 'CUSTOM_ELEMENTS_SCHEMA'를 추가하십시오. '

또한 테스트 중에 하위 구성 요소가 브라우저 내부에 표시 되지 않았습니다 .

내가 사용하는 ng g c newcomponent그들이 이미 appmodule에 선언 만하고, 그래서 모든 구성 요소를 생성 할 수 없는 구성 요소에 대해 내가 spec'ing 것을 테스트 모듈을.

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ EditorComponent,
        InterviewComponent]
    })
    .compileComponents();
  }));

1

AppComponent의 동일한 모듈에서 MyComponentComponent를 선언해야합니다.

import { AppComponent } from '...';
import { MyComponentComponent } from '...';

@NgModule({
   declarations: [ AppComponent, MyComponentComponent ],
   bootstrap: [ AppComponent ]
})
export class AppModule {}

1
  1. 당신 MyComponentComponent을 선언하십시오MyComponentModule
  2. MyComponentComponentexports속성 추가MyComponentModule

mycomponentModule.ts

@NgModule({
   imports: [],
   exports: [MyComponentComponent],
   declarations: [MyComponentComponent],
   providers: [],
})

export class MyComponentModule {
}
  1. MyComponentModuleAppModule imports속성에 추가

app.module.ts

    @NgModule({
       imports: [MyComponentModule]
       declarations: [AppComponent],
       providers: [],
       bootstrap: [AppComponent]
    })
    export class AppModule {} 

중요 여전히 오류가 발생하면 ctrl+c터미널에서 서버 를 중지 하고 다시 실행하십시오.ng serve -o


마지막 단계는 한동안 다루지 않은 프로젝트에 필요한 것입니다. 'npm 설치' 'ng 업데이트'후 'npm 업데이트'
Jeff Longo

1

제 경우에는 공유 모듈에 구성 요소가 있습니다.

구성 요소가로드되고 잘 작동했지만 typescript는 html 태그를 빨간색 선으로 강조 표시하고이 오류 메시지를 표시했습니다.

이 구성 요소 내에서 rxjs 연산자를 가져 오지 않은 것으로 나타났습니다.

import {map} from 'rxjs/operators';

이 가져 오기를 추가했을 때 오류 메시지가 사라졌습니다.

구성 요소 내부의 모든 가져 오기를 확인합니다 .

누군가에게 도움이되기를 바랍니다.


1

부모 구성 요소가 선언되는 모듈을 확인하십시오.

부모 구성 요소가 공유 모듈에 정의되어 있으면 자식 모듈도 마찬가지입니다.

부모 구성 요소는 파일 디렉터리 구조 / 이름 지정을 기반으로하는 논리적 모듈이 아닌 공유 모듈에서 선언 될 수 있습니다. Angular CLI에서도 제 경우에는 잘못된 모듈에 추가했습니다.


0

당신이 가지고 있기를 바랍니다 app.module.ts. app.module.ts아래 줄에 추가-

 exports: [myComponentComponent],

이렇게 :

import { NgModule, Renderer } from '@angular/core';
import { HeaderComponent } from './headerComponent/header.component';
import { HeaderMainComponent } from './component';
import { RouterModule } from '@angular/router';

@NgModule({
    declarations: [
        HeaderMainComponent,
        HeaderComponent
    ],
    imports: [
        RouterModule,
    ],
    providers: [],
    bootstrap: [HeaderMainComponent],
    exports: [HeaderComponent],
})
export class HeaderModule { }

0

components.module.ts에서 다음과 같이 IonicModule을 가져와야합니다.

import { IonicModule } from '@ionic/angular';

그런 다음 IonicModule을 다음과 같이 가져옵니다.

  imports: [
    CommonModule,
    IonicModule
  ],

따라서 components.module.ts는 다음과 같습니다.

import { CommonModule } from '@angular/common';
import {PostComponent} from './post/post.component'
import { IonicModule } from '@ionic/angular';

@NgModule({
  declarations: [PostComponent],
  imports: [
    CommonModule,
    IonicModule
  ],
  exports: [PostComponent]
})
export class ComponentsModule { }```

0

하지마 export **default** class MyComponentComponent!

특정 질문이 아닌 경우 제목에 해당 할 수있는 관련 문제 :

실수로 ...

export default class MyComponentComponent {

... 그리고 그것도 일을 망쳤습니다.

왜? VS Code는에 넣을 때 내 모듈에 가져 오기를 추가 declarations했지만 대신 ...

import { MyComponentComponent } from '...';

그것은 가지고 있었다

import MyComponentComponent from '...';

그리고 그것은 다운 스트림으로 매핑되지 않았습니다. 기본 가져 오기를 사용하여 "정말"이름이 지정되지 않았기 때문이라고 가정합니다.

export class MyComponentComponent {

아니 default. 이익.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.