I want to make an <input> text box where you write a certain color, say 'red' and a certain text gets colored like that. I found some guidelines on how to do it, but the code is in JavaScript, instead of TypeScript. So far I got this:
HTML
<input id="color" /> <h1>Change the color</h1>
CSS
<style>
h1 {
color: var(--color, blue)
}
</style>
JavaScript
const color = document.querySelector('#color');
color.addEventListener('input', e => {
document.documentElement.style.setProperty('--color', color.value)
})
As I am using .ts classes, I am wondering how can the JavaScript above be written instead?
Advertisement
Answer
To achieve that you should read the value of input (let’s use two-way binding via [(ngModel)] directive), and then just use this value to apply as a style rule ([style.color] fits perfectly for this). And finally, you should end up with just a few lines of code:
HTML:
<input [(ngModel)]="color" /> <h1 [style.color]="color">Change the color</h1>
TS:
export class AppComponent {
color: string;
}
Here is a STACKBLITZ.
I also defined a default blue color in CSS just for example. This works as a default color because style rules defined via style attribute have a higher priority in this case.
UPDATE
If you want to control the color of all the elements over your app, you can use @HostBinding('style') at the top-level component this way:
export class AppComponent {
color: string;
@HostBinding('style')
get myStyle(): SafeStyle {
return this.sanitizer.bypassSecurityTrustStyle(`color: ${this.color};`);
}
constructor(private sanitizer:DomSanitizer) {}
}
Here is a STACKBLITZ.
