角度4のアプリケーションを作成しました。これには、コンポーネント:、app.component、、home.component、feature1.componentが含まれます。角度4スタイルのタグは、再ルーティング後にHTMLに残ります
app.component:
@Component({
selector: 'my-app',
templateUrl: 'app/app.component.html',
styleUrls: ['app/app.component.css'],
encapsulation: ViewEncapsulation.None
})
export class AppComponent { }
home.component:
@Component({
templateUrl: 'app/Components/home.component.html',
styleUrls: ['app/Components/home.component.css'],
encapsulation: ViewEncapsulation.None
})
export class HomeComponent { }
feature1.component:
@Component({
templateUrl: 'app/Components/feature1.component.html',
styleUrls: ['app/Components/feature1.component.css'],
encapsulation: ViewEncapsulation.None
})
export class Feature1Component { }
app.routing:
const appRoutes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'feature1', component: Feature1Component }
];
今私はfeature1.componentをロードする際app.componentのヘッダにいくつかのスタイルを上書きしたかったです。これで、ViewEncapsulation.Noneと動作します。ただし、styleタグはhome.componentに戻ったときにHTML文書に残り、ウェブサイトのヘッダーのスタイリングはfeature1.component-ページと同じです。スタイルタグをfeature1.componentから削除するにはどうすればよいですか?
問題の小さなデモを言葉で理解するのは難しいですか? –
デフォルトのカプセル化で動作するなら、スタイルで ':: ng-deep'を使ってスタイルを動作させることができます。 –
コンポーネントは自己完結型である必要があります。あるコンポーネントのスタイルを別のコンポーネントからオーバーライドしようとするべきではありません。代わりに、現在表示されている子コンポーネントを認識できるappコンポーネント(親コンポーネント)を作成し、親コンポーネントの* ngClassを使用するスタイルに基づいて独自のスタイルを変更します。あなたは、親がどの子がロードされているかをチェックするか、ロードされた子が色付きの親にイベントを送出し、親のスタイル自体を子から渡された色に基づいているようにするか、子がロードされていない場合のデフォルト。 –