アプリ全体に共通のヘッダーとフッターを表示したい。しかし、私がそれをやろうとすると、それは2回表示されます:-
app.component.html
<header>
Header
</header>
<router-outlet></router-outlet>
<footer>
Footer
</footer>
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
}
app.module.ts
RouterModule.forRoot([
{path: 'home', component: AppComponent},
{path: '*', redirectTo: 'home', pathMatch: 'full'},
{path: '**', redirectTo: 'home', pathMatch: 'full'}
])
結果
Header
Header
Footer
Footer
前回、ヘッダーとフッターのコンポーネントを作成してこの問題を解決しました。同じことをすればうまくいくことはわかっていますが、なぜこれが間違っているのかを理解したいと思います。
Appコンポーネントは、アプリケーションのルートコンポーネントであり、常に存在し、このルートコンポーネント内で、ルーターのアウトレットによって「ホーム」パスに表示されるコンポーネントでもあるためです。つまり、ルーターがアプリコンポーネント内にアプリコンポーネントを表示するということです。
実際の異なるホームコンポーネントを作成します。ホームページのルートコンポーネントを再利用しないでください。
AngularコンポーネントをWebコンポーネントに変換するコンテキストで、次のことが起こりました(あなたまたは他の読者がこの特定のユースケースによって識別されていると感じる場合):
Angularコンポーネントが2回レンダリングされるもう1つの理由は、コンポーネントをWebコンポーネント(_@angular/elements
_パッケージを使用)として登録している可能性があるためです。時間、あなたはangularコンポーネントと同じコンポーネントを使用しています。
たとえば、別のangularコンポーネント(例:_<simple-title>
_)内で使用しているangularコンポーネント(例:_<complex-title>
_)がある場合)、最初のコンポーネントをWebコンポーネント(例:createCustomElement(<simple-title>)
)として登録した場合、2番目のコンポーネント(_<complex-title>
_)はangular version and theコンポーネントのWebコンポーネントバージョンが有効であるため、2回レンダリングします。
解決策(私の場合)は、両方のコンポーネントで再利用できる別のangularコンポーネント(例:_<title-renderer>
_と_<simple-title>
_で使用される_<complex-title>
_)を作成することでした)。