在發送短信驗證碼的地方,為了防止用戶重復點擊(畢竟發送一次需要5分錢成本),往往會將按鈕變灰一分鍾時間,在這期間,按鈕上顯示倒計時。這個效果在最新的Angular6中利用內置的RxJS庫非常容易實現,只要幾行代碼就可以實現。RxJS(響應式擴展的 JavaScript 版)是一個使用可觀察對象進行響應式編程的庫,它讓組合異步代碼和基於回調的代碼變得更簡單。RxJS 提供了一種對 Observable 類型的實現,直到 Observable 成為了 JavaScript 語言的一部分並且瀏覽器支持它之前,它都是必要的。
以下是控制器代碼:
以下是控制器代碼:
import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
const numbers = interval(1000);
const takeFourNumbers = numbers.pipe(take(60));
takeFourNumbers.subscribe(
x => {
this.paracont = (60-x)+"秒后可重發";
this.disabledClick=true;
},
error => {},
() => {
this.paracont = "重新發送驗證碼";
this.disabledClick=false;
});
HTML中的按鈕:
<button type="button" class="btn btn-primary px-4"
[disabled]="disabledClick" (click)="getverifycode()">{{paracont}}</button>
系統創建了一個Observable的定時器對象,每一秒執行一次,這樣實現的異步代碼十分簡潔。需要注意的是代碼中的error => {},不能省略。
