에러 백과

하이드레이션에서 지원하지 않는 DOM 노드 프로젝션

이 오류는 서버 측 직렬화 과정에서 Angular 컨텍스트 밖에서 생성된 노드, 즉 네이티브 DOM API 등으로 만든 노드가 프로젝션 가능한 노드로 제공되었다는 뜻입니다. 이 노드들은 ViewContainerRef.createComponent나 createComponent API를 통해 제공되었을 가능성이 큽니다. Angular 하이드레이션은 이 사용 사례를 지원하지 않습니다.

하이드레이션에 대한 자세한 내용은 이 가이드를 참고하세요.

다음 예제에서는 이 오류가 발생합니다.

@Component({
  selector: 'dynamic',
  template: `<ng-content />`,
})
class CardWrapper {}

@Component({
  selector: 'app',
  template: `<div #target></div>`,
})
class DynamicCard {
  @ViewChild('target', {read: ViewContainerRef}) vcr!: ViewContainerRef;
  envInjector = inject(EnvironmentInjector);

  ngAfterViewInit() {
    const div = document.createElement('div');
    const p = document.createElement('p');
    // 이 테스트에서는 Angular 컨텍스트 밖에서 DOM 노드를 생성합니다.
    // 즉, Angular API를 사용하지 않고 만든 노드를 콘텐츠 프로젝션하려고 합니다.
    // 지원하지 않는 패턴이므로 예외가 발생합니다.
    const compRef = createComponent(CardWrapper, {
      environmentInjector: this.envInjector,
      projectableNodes: [[div, p]],
    });
  }
}

오류 디버깅

개발자 콘솔의 오류 메시지에는 애플리케이션 DOM 구조에서 문제를 일으키는 특정 부분에 대한 정보가 포함됩니다. 해당 부분에 네이티브 API를 이용한 직접 DOM 조작 같은 하이드레이션 관련 오류가 있는지 살펴보세요.

임시 해결 방법으로 컴포넌트 호스트 노드에 ngSkipHydration 속성을 추가할 수 있습니다.