Search code examples
cssangularangular-components

How to dynamically change CSS in :host in angular 2?


How do I dynamically change CSS properties of a component host?

I have a component and in it's CSS I have given it a stlye:

:host {
  overflow-x: hidden
}

On a button click from child component, I need to add overflow-y: hidden to the host component.

How do I achieve this behavior?


Solution

  • Here is a working example.

    Use the following HostBinding:

    @HostBinding('style.overflow-y') overflowY = 'scroll';
    

    This would give the following component:

    @Component({
        selector: 'my-app',
        template: `
              <div>
                <button (click)="addStyle()">Add Style</button>
                <h2>Hello</h2>
              </div>`, styles: [
            `
            :host {
              overflow-x: hidden;
              height: 50px;
              width: 200px;
              display: block;
            }
            `,
        ],
    })
    export class App {
        name: string;
    
        @HostBinding('style.overflow-y')
        overflowY = 'scroll';
    
        constructor() {
        }
    
        addStyle() {
            this.overflowY = 'hidden';
        }
    }