
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
@code-workers.io/ngx-block-ui
Advanced tools
> **Important Note** > This library has its origin in the awesome [ng-block-ui](https://github.com/kuuurt13/ng-block-ui) library > from kuuurt13. We are very thankful for his work. > Why did we release it as a new library? Mainly to support Ivy, a modern
Important Note This library has its origin in the awesome ng-block-ui library from kuuurt13. We are very thankful for his work. Why did we release it as a new library? Mainly to support Ivy, a modern Angular environment and of course to ship new features and improvements.
A Block UI implementation for Angular
Add to your project via npm:
npm install @code-workers.io/ngx-block-ui --save
Include the NgxBlockUIModule in your main app module.
// All other imports
import { NgxBlockUIModule } from '@code-workers.io/ngx-block-ui';
@NgModule({
imports: [
NgxBlockUIModule.forRoot()
],
...
})
export class AppModule { }
Wrap your main components in your app root template with a block-ui component.
Import the BlockUI decorator into your component and declare a property with the decorator.
This decorator will auto wire this property to the main Block UI instance of your app.
To start blocking your app, simply invoke the start method.
This method also can take a custom message to display while blocking.
Once finished call the stop method to stop blocking the app.
import { Component } from '@angular/core';
// Import BlockUI decorator & optional NgBlockUI type
import { BlockUI, NgBlockUI } from 'ng-block-ui';
@Component({
selector: 'app-root',
template: `
<block-ui>
<!-- Your app markup here -->
</block-ui>
`
})
export class AppComponent {
// Decorator wires up blockUI instance
@BlockUI() blockUI: NgBlockUI;
constructor() {
this.blockUI.start('Loading...'); // Start blocking
setTimeout(() => {
this.blockUI.stop(); // Stop blocking
}, 2000);
}
For more information and/or migrating to the newest version see Releases.
Settings can be changed on the module level and component/directive level. Also, in some cases settings can be overwritten via the method level.
A default message can be configured to be shown instead of passing a message each time to the start method. The default message will be shown any time blocking is activated.
| Setting | Type | Description |
|---|---|---|
message | string | Custom message to be displayed while blocking. |
@NgModule({
imports: [
NgxBlockUIModule.forRoot({
message: 'Default Message'
})
],
...
})
export class AppModule { }
<block-ui message="Default Message">
<!-- Markup here -->
</block-ui>
@Component({
...,
template: `
<block-ui message="Default Message">
<!-- Your markup here -->
</block-ui>
`
})
export class Cmp {
@BlockUI() blockUI: NgBlockUI;
defaultMessage() {
this.blockUI.start(); // "Default Message" will display
}
customMessage() {
this.blockUI.start('Updating...'); // "Updating..." will display
}
}
When blocking with fast service calls the block overlay can flicker for a small amount of time.
To prevent this a delayStart and a delayStop can be configured to prevent this scenario.
| Setting | Type | Description |
|---|---|---|
delayStart | number | Waits given amount of milliseconds before starting to block. |
delayStop | number | Waits given amount of milliseconds before stopping current block. |
@NgModule({
imports: [
NgxBlockUIModule.forRoot({
delayStart: 500,
delayStop: 500
})
],
...
})
export class AppModule { }
<block-ui [delayStart]="500" [delayStop]="500">
<!-- Your app markup here -->
</block-ui>
If you want to display other markup than the default spinner and message then you can provide a custom template.
Custom templates can be provided as a Component or TemplateRef. The template will then be used instead of the default template whenever blocking.
| Setting | Type | Description |
|---|---|---|
template | Component | TemplateRef | Custom template to be used when blocking |
Create a component and declare it in your app module.
The component also will need to be added to the entryComponents property of the module.
Example Component:
Note: When providing a Component as a template just add the {{message}}
interpolation to your template and it will display your default message or the message passed to the start method.
// Template component
// Use block-ui-template class to center div if desired
@Component({
template: `
<div class="block-ui-template">
<img src="logo.png" />
<p>{{ message }}</p>
</div>
`,
})
export class BlockTemplateCmp {}
@NgModule({
imports: [
NgxBlockUIModule.forRoot({
template: BlockTemplateCmp
})
],
declarations: [
...,
BlockTemplateCmp // Declare template component
],
entryComponents: [ BlockTemplateCmp ]
})
export class AppModule { }
@Component({
selector: "app-root",
template: `
<block-ui [template]="blockTemplate">
<!-- Your markup here -->
</block-ui>
`,
})
export class AppComponent {
// Declare template component
blockTemplate: BlockTemplateCmp = BlockTemplateCmp;
}
Add a <ng-template> with a template reference variable to the view. Then pass the template reference variable to the blockUI component using the [template] property.
Note: TemplateRef templates can only be set on a Component level.
@Component({
selector: "cmp",
template: `
<ng-template #blockTemplate>
<div class="block-ui-template">
<img src="logo.png" />
</div>
</ng-template>
<block-ui [template]="blockTemplate">
<!-- Your app markup here -->
</block-ui>
`,
})
export class Cmp {}
Sometimes you want to only apply blocking to a certain element in your app. The Block UI directive can be added to an element to apply blocking only to that specific element.
Add the *blockUI structural directive to any element
and pass it an instance name *blockUI="'contact-list'".
Then in a component create a class property using the Block UI decorator with the instance name @BlockUI('contact-list'). This will then take care of wiring up that property to point to that specific instance in your app.
@Component({
selector: 'app-cmp',
template: `
<div>
<div *blockUI="'contact-list'">
<!-- List markup -->
</div>
</div>
`
})
export class AppComponent {
// Pass instance name to decorator
@BlockUI('contact-list') blockUIList: NgBlockUI;
constructor() {
this.blockUIList.start('Loading...'); // Start blocking element only
this.blockUIList.stop(); // Stop blocking
}
Angular has a specific syntax for passing properties to structural directives. Properties are passed in key: value; pair. To pass settings to a Block UI directive they must be passed as shown below.
<div
*blockUI="'instance-name'; message: 'Loading'; template: blockTemplate"
></div>
Below highlights all the properties that can be found on a BlockUI instance when a class property is decorated with the @BlockUI() decorator.
| Property | Description |
|---|---|
name | Name of the targeted instance (defaults to main instance). |
isActive | Indicates if the targeted instance is blocking. |
start | Starts blocking for instance, can be passed an optional message. |
stop | Stops blocking for instance. |
reset | Stops blocking for all targeted instances regardless of the delayStop option. |
resetGlobal | Stops blocking app wide for all instances regardless of the delayStop option. |
update | Updates current instances blocking message with the passed message. |
unsubscribe | Unsubscribe an instance so it no longer can be blocked. All BlockUI components/directives unsubscribe by default during onDestroy. |
Below are all the settings that can be passed as a second argument to the @BlockUI() decorator (@BlockUI(<name>, <settings>)).
| Property | Description |
|---|---|
scopeToInstance | When set to true a unique name will be given to the blockUI instance which will "scope" it to the parent component instance. |
In some cases you may want to have more control over all the instances in you app.
Instead of declaring separate instances with the @BlockUI() decorator you can use the BlockUIService. This service allows you to easily target multiple instance across your app.
| Method | Parameters | Description |
|---|---|---|
isActive | target: string | string[] | Indicates if the targeted instance(s) is blocking. |
start | target: string | string[], message?: any | Starts blocking for a single instance or multiple instances by passing instance name(s). |
stop | target: string | string[] | Stops blocking for a single instance or multiple instances by passing instance name(s). |
update | target: string | string[], message: any | Updates message for a single instance or multiple instances by passing instance name(s). |
reset | target: string | string[] | Resets blocking for a single instance or multiple instances by passing instance name(s). |
resetGlobal | N/A | Resets blocking app wide for all instances. |
unsubscribe | target: string | string[] | Unsubscribes a single instance or multiple instances by passing instance name(s). |
FAQs
> **Important Note** > This library has its origin in the awesome [ng-block-ui](https://github.com/kuuurt13/ng-block-ui) library > from kuuurt13. We are very thankful for his work. > Why did we release it as a new library? Mainly to support Ivy, a modern
The npm package @code-workers.io/ngx-block-ui receives a total of 3 weekly downloads. As such, @code-workers.io/ngx-block-ui popularity was classified as not popular.
We found that @code-workers.io/ngx-block-ui demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.