@Component({
selector: 'app-style',
template: `
<style>
.test {
color: {{ textColor }}
}
</style>
`
})
export class StyleComponent {
textColor = "red";
}
これは機能していないようで、スタイルを動的にして特定のCSSクラスにする必要があります。これを行う方法は他にありますか?
コンポーネントがレンダリングされると、スタイルタグはページのヘッド要素に移動し、この要素内のangular構文は無視されます。
私が見つけた唯一の方法は、動的なスタイル要素を作成し、欲求スタイルを提供することです。
app.component.ts
textColor = 'red';
constructor(private el: ElementRef) {
}
ngOnInit() {
let style: string = `
.test {color :${this.textColor}; }
`;
this.createStyle(style);
}
createStyle(style: string): void {
const styleElement = document.createElement('style');
styleElement.appendChild(document.createTextNode(style));
this.el.nativeElement.appendChild(styleElement);
}
app.template.html
<span class="test">test</span>
このようなngStyleディレクティブを使用できます。
@Component({
selector: 'app-style',
template: `
<ul>
<li [ngStyle]="{color: textColor}">List Item</li>
</ul>
`
})
export class StyleComponent {
textColor = "red";
}
私も同じ問題に直面していました。私の場合、彼は色を変えていたxmlを使用し、アプリケーションのロード時にapiを呼び出してxmlを読み取ってJSONオブジェクトを取得しました。 PrimaryForeground、PrimaryBackground、PrimaryHoverなどのすべての要素の色を分類しました。jsonオブジェクトを取得したら、この変数の値を更新していました。
[style.color]
でカラースタイルにアクセスするか、スタイルシート[class]
で定義済みのクラスを指定できます。
<div [style.color]="color">Style Test</div>
<div [class]="className">Class Test</div>
$ {}で試す
template: `
<style>
.test {
color: ${textColor}
}
</style>
`
CSSを動的にロードしたい場合は、「簡単」にできます。最初の試み(アセットフォルダ「style1.css」と「style2.css」にある)は、app.component.htmlにのみ書き込みます
<link rel="stylesheet" [href]='myStyle'>
...rest of tags...
//In your app.component.ts
myStyle="assets/style1.css"
しかし問題は、「リソースURLコンテキストで使用されている安全でない値」というエラーが発生するため、Domsatinizerを使用する必要があることです。そう
あなたのapp.componentのような
<link rel="stylesheet" [href]='sanitizer.bypassSecurityTrustResourceUrl(myStyle)'>
..rest of your div..
App.component.ts
import { DomSanitizer } from '@angular/platform-browser';
@Component({...})
export class appComponent{
myStyle="assets/style1.css"
constructor(public sanitizer: DomSanitizer) {}
}