エラー百科辞典

Hydration Unsupported Projection of DOM Nodes

このエラーは、サーバーサイドシリアライゼーションプロセス中に、Angularが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のコンテキスト外(つまり、Angular APIを使用せずに)DOMノードを作成し、
    // それらをコンテンツ投影しようとします。
    // これはサポートされていないパターンであり、例外がスローされます。
    const compRef = createComponent(CardWrapper, {
      environmentInjector: this.envInjector,
      projectableNodes: [[div, p]],
    });
  }
}

エラーのデバッグ

開発者コンソールのエラーメッセージには、問題の原因となっているアプリケーションのDOM構造の特定の部分に関する情報が含まれているはずです。ネイティブAPIを使用した直接のDOM操作など、ハイドレーション関連のエラーについて、アプリケーションのその部分をレビューしてください。

可能な回避策として、コンポーネントホストノードにngSkipHydration属性を追加できます。