Use the fork, Luke. PR without tests will likely not be merged.
To install this library, run:
$ npm install ng-http-loader --save
This package provides an HTTP Interceptor, and a spinner component (All from SpinKit at the moment). The HTTP interceptor listens to all HTTP requests and shows a spinner / loader indicator during pending http requests.
The latest compatible version with angular 4 is 0.3.4
.
If you want to use Angular 5, use versions 0.4.0
and above.
The latest compatible version with angular 5 is version 0.9.1
.
Versions above 0.9.1
are angular 6 / RxJS 6 compatible only.
If you experience errors like below, please double check the version you use.
ERROR in Error: Metadata version mismatch for module [...]/angular/node_modules/ng-http-loader/ng-http-loader .module.d.ts, found version x, expected y, resolving symbol AppModule in [...]/angular/src/app.module.ts
Performing http requests with the HttpClientModule
API is mandatory. Otherwise,the spinner will not be fired at all.
See this blog post for an HttpClientModule
introduction.
From your Angular AppModule
:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
[...]
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http'; <============
import { NgHttpLoaderModule } from 'ng-http-loader/ng-http-loader.module'; <============
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule, <============ (Perform http requests with this module)
NgHttpLoaderModule, <============
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
or (splitted modules mode for more convenience)
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
[...]
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http'; <============
import { NgHttpLoaderComponentsModule } from 'ng-http-loader/components/ng-http-loader-components.module'; <============
import { NgHttpLoaderServicesModule } from 'ng-http-loader/services/ng-http-loader-services.module'; <============
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule, <============ (Perform http requests with this module)
NgHttpLoaderServicesModule, <============
NgHttpLoaderComponentsModule, <============
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
In your app.component.html, simply add :
<spinner></spinner>
You can customize the background-color, the spinner type and the debounce delay (ie. after how many milliseconds the spinner will be displayed, if needed):
<spinner
[backgroundColor]="'#ff0000'"
[spinner]="spinkit.skWave"
[debounceDelay]="200"
>
</spinner>
To use this syntax, you must reference the Spinkit
const as a public property in your app.component.ts:
import { Spinkit } from 'ng-http-loader/spinkits'; <============
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
public spinkit = Spinkit; <============
[...]
}
The different spinners available are referenced in this class.
Otherwise, you can simply reference the chosen spinner as a simple string:
<spinner backgroundColor="#ff0000" spinner="sk-wave"></spinner>
You can define your own loader component in place of the built-in ones. The needed steps are:
- Create your component
- Add it to the entryComponent definition in your module definition
- Reference your component in a public property in your
app.component.ts
- Reference the property in the spinner component like this :
<spinner [entryComponent]="myAwesomeComponent"></spinner>
You can find some short examples here and here.
You can also filter the http requests that shouldn't be caught by the interceptor by providing an array of regex patterns:
<spinner [filteredUrlPatterns]="['\\d', '[a-zA-Z]', 'my-api']"></spinner>
You can manually show and hide the spinner component if needed. You must use the SpinnerVisibilityService
for this purpose.
import { SpinnerVisibilityService } from 'ng-http-loader/services/spinner-visibility.service';
@Component({
selector: 'my-component',
templateUrl: './my.component.html',
styleUrls: ['./my.component.css'],
})
export class MyComponent {
constructor(private spinner: SpinnerVisibilityService) {
// show the spinner
spinner.show();
// hide the spinner
spinner.hide();
}
}
Each Spinkit component defined in SPINKIT_COMPONENTS can be used independently.
Tobias Ahlin, the awesome creator of SpinKit.