コンポーネントページと対応するスタイルシートがありますが、component.scssのクラスはページに適用されません。エラーはありません、私はまだなぜ疑問に思っていますか?
これは私のproduct-detailpage.component.htmlです
<div>
<h1>Product Detail Page</h1>
</div>
これは.tsファイルです
import { Component, OnInit } from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {ProductdetailService} from '../productdetail.service';
@Component({
selector: 'app-product-detailpage',
templateUrl: './product-detailpage.component.html',
styleUrls: ['./product-detailpage.component.scss']
})
export class ProductDetailpageComponent implements OnInit {
constructor(private route: ActivatedRoute, private productData: ProductdetailService) {
this.route.params.subscribe(params => console.log(params));
}
ngOnInit() {
}
}
これは.scssファイルです
body{color:Red !important}
app-product-detailpage{
h1{color:red !important}
}
ただし、グローバルなstyles.cssに変更を加えると問題なく動作することに気付きました。確認するために、ボディの色を緑に変更しました。
私のangularアプリはscssで動作するように設定されています。理由は何でしょうか?誰かが提案できますか?
SCSSはHTMLファイルproduct-detailpage.component.htmlでは機能しません。
理由はAngularはコンポーネントに shadow DOM を使用しています。つまり、タグ<body>
および<app-product-detailpage>
はコンポーネントのどこにもありません。
Angular
のデフォルトのCSSカプセル化はEmulated
(ViewEncapsulation.Emulated
)なので、Angularは以下のようにレンダリングされます。
input[_ngcontent-c0] {
border-radius: 5px;
}
したがって、スタイルを現在component
に設定する場合は、Native
オプションを使用できます。
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
encapsulation : ViewEncapsulation.Native
})
次のようにレンダリングされます。
input {
border-radius: 5px;
}
しかし最後に、globalscssファイルを使用して<web component>
のスタイルを定義することをお勧めします。
ドキュメント に従って、コンポーネントで指定されたスタイルはテンプレートにのみ適用でき、コンポーネントは除外されます。
これが、スタイルがコンポーネントのstyle.scssのコンポーネントで機能していないが、グローバルスタイルシートでは正常に機能している理由です。
それを行う1つの方法は、:Host
擬似セレクター このドキュメント に従って、コンポーネントが配置されるコンテナにスタイルを追加できます。
ドキュメントには-
The :Host selector is the only way to target the Host element. You can't reach the Host element from inside the component with other selectors because it's not part of the component's own template. The Host element is in a parent component's template.