npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ngx-detach-invisible

v0.0.4

Published

Allows to detach computation heavy components from Angular change detection mechanism if they are not visible in viewport

Readme

ngx-detach-invisible

Allows to detach components not visible in viewport from change detection (do not rerender templates) by placing detach-invisible directive on component in template

Check out stackblitz demo!

How do I benefit from using this library?

DetachInvisibleDirective makes your visible components to render faster by detaching components not visible in viewport. This allows to reduce the amount of cpu usage for rendering and updating templates as long as computations on page especially if you have components which take time to render. For example, they have not memoized hard to calculate getters or complex RxJS pipelines

Usage

To use this library add in template detach-invisible directive on your component in template

<demo-heavy-computation
  detach-invisible
  [count]="count"
></demo-heavy-computation>

Or if you want all component instances to be detached when they are invisible then simply inherit DetachInvisibleDirective

@Component({
  /* ... */
})
export class DemoComponent extends DetachInvisibleDirective {
}

And put DetachInvisibleService to your AppModule providers:

@NgModule({
  /* ... */
  providers: [
    DetachInvisibleService
  ],
  bootstrap: [AppComponent],
})
export class AppModule { }

Experimental features

You can use @DetachInvisible() decorator on your components which already inherit from some classes. This decorator adds class with the same logic that the DetachInvisibleDirective has and puts itself between component's class and component's superclass in prototype chain.

It's not recommended using this method (especially in production) that's why it is currently marked as deprecated.

If you want to try this out:

  • add @DetachInvisible() decorator to your component
  • implement DetachIvisibleProviders interface to provide required dependencies which will be used implicitly
  • add ElementRef, ChangeDetectorRef and DetachInvisibleService providers

As this class stands in between on component and component's base class and we don't know which providers component's superclass uses. We can't specify constructor, therefore it is required for component to inject their dependencies r

@DetachInvisible()
@Component({
})
export class DemoComponent extends BaseComponent implements DetachInvisibleProviders {

  constructor(
    public elementRef: ElementRef,
    public changeDetectorRef: ChangeDetectorRef,
    public detachInvisibleService: DetachInvisibleService
  ) {
    super();
  }
}