@ng-web-apis/resize-observer

A library for declarative use of Resize Observer API with Angular

Usage no npm install needed!

<script type="module">
  import ngWebApisResizeObserver from 'https://cdn.skypack.dev/@ng-web-apis/resize-observer';
</script>

README

Resize Observer API for Angular

Part of Web APIs for Angular

npm version npm bundle size Travis (.com) Coveralls github angular-open-source-starter

This is a library for declarative use of Resize Observer API with Angular.

Install

If you do not have @ng-web-apis/common:

npm i @ng-web-apis/common

Now install the package:

npm i @ng-web-apis/resize-observer

Usage

  1. Use waResizeObserver directive to observe an element:
<section>
    <h1 waResizeBox="content-box" (waResizeObserver)="onResize($event)">
        I'm being observed
    </h1>
</section>

Use waResizeBox to configure ResizeObserver options

NOTE: Keep in mind these are used one time in constructor so you cannot use binding, only strings.

Service

Alternatively you can use Observable-based ResizeObserverService and provide token RESIZE_OPTION_BOX manually:

@Component({
    selector: 'my-component',
    providers: [
        ResizeObserverService,
        {
            provide: RESIZE_OPTION_BOX,
            useValue: 'border-box',
        },
    ],
})
export class MyComponent {
    constructor(@Inject(ResizeObserverService) entries$: ResizeObserverService) {
        entries$.subscribe(entries => {
            // This will trigger when the component resizes
            // Don't forget to unsubscribe
            console.log(entries);
        });
    }
}

Browser support

IE / Edge
Firefox
Chrome
Safari
iOS Safari
79+ 69+ 64+ 13.1+ 13.4+

You can use polyfill to support older browsers

Demo

You can try online demo here

See also

Other Web APIs for Angular by @ng-web-apis

Open-source

Do you also want to open-source something, but hate the collateral work? Check out this Angular Open-source Library Starter we’ve created for our projects. It got you covered on continuous integration, pre-commit checks, linting, versioning + changelog, code coverage and all that jazz.