DEV Community

ILshat Khamitov
ILshat Khamitov

Posted on • Updated on

Two small directives for work with observable in Angular 8 without subscribe

Two small directives for work with observable in Angular8+ without subscribe:
❄️ coldClick - easy way for run http post from template.
❄️ coldForm - easy way for submit typed form data to remote server from template.

Installation

npm i --save ngx-cold
Enter fullscreen mode Exit fullscreen mode

Usage *coldClick

app.module.ts

import { HttpClientModule } from '@angular/common/http';
import { NgxColdModule } from 'ngx-cold';

@NgModule({
  imports: [
    ...
    HttpClientModule,
    NgxColdModule,
    ...
  ],
  ...
})
export class AppModule {}
Enter fullscreen mode Exit fullscreen mode

app.component.html

...
<p>Save with *coldClick</p>
<button
  *coldClick="let coldSave of onSave"
  (click)="coldSave.call({userData:'custom data'})"
  [disabled]="coldSave.isLoading"
>
  {{ coldSave.isLoading ? 'Save in processing...' : 'Save' }}
</button>
...
Enter fullscreen mode Exit fullscreen mode

app.component.ts

import { HttpClient } from '@angular/common/http';
...
constructor(private httpClient: HttpClient) {}
onSave(data: any) {
  return this.httpClient.post('/api/user', data);
}
...
Enter fullscreen mode Exit fullscreen mode

Usage *coldForm

app.module.ts

import { HttpClientModule } from '@angular/common/http';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgxColdModule } from 'ngx-cold';

@NgModule({
  imports: [
    ...
    HttpClientModule,
    NgxColdModule,
    ReactiveFormsModule,
    FormsModule,
    ...
  ],
  ...
})
export class AppModule {}
Enter fullscreen mode Exit fullscreen mode

app.component.html

...
<p>Save with *coldForm</p>
<div *coldForm="let coldForm of searchField; with: { delay: 700, change: onSearch, result: [] }">
  <input [formControl]="searchField" />
  <div *ngIf="coldForm.isLoading">Loading...</div>
  <pre [innerText]="coldForm.result|async|json"></pre>
</div>
...
Enter fullscreen mode Exit fullscreen mode

app.component.ts

import { HttpClient } from '@angular/common/http';
import { FormControl } from '@angular/forms';
...
searchField = new FormControl();
constructor(
  private httpClient: HttpClient
) {}
onSearch(search: string) {
  return this.httpClient.get('/api/users', {
    params: {
      search
    }
  });
}
...
Enter fullscreen mode Exit fullscreen mode

Links

Sources - Sources on github

Demo - Demo application with ngx-cold.

Stackblitz - Simply sample of usage on https://stackblitz.com

Top comments (0)