【RxJS】指定した秒数遅らせてデータを処理
概要
RxJSで指定した秒数遅らせてデータを処理したい場合、deley
オペレーターを使用します。
引数でnumber型を設定すればミリ秒単位の指定が出来ます。
ローディング処理とかの確認に使うと便利です。
【VSCode】Visual Studio Codeでregionを使う
概要
Visual Studio Code では、Visual Studio の C# のように region指定が出来ます。
今回は Visual Studio Code で TypeScript, HTML, CSS に対してregion指定をしたいと思います。
基本的には各言語のコメントアウト部分に #region
と #endregion
を設定するだけです。
動作環境
- Visual Studio Code Version 1.23
サンプルソース
TypeScript
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { // #region fields /** タイトル */ title = 'app'; // #endregion // #region methods /** * クリックイベント */ onClick(): void { console.log('hoge'); } // #endregion }
折り畳みイメージ
HTML
<!--#region header --> <div style="text-align:center"> <h1> Welcome to {{ title }}! </h1> </div> <!-- #endregion -->
CSS
/* #region color */ .hoge { color: blue; } /* #endregion */
終わりに
region を利用することで、指定した範囲を折り畳み可能になります。 フィールド、パブリックメソッド、プライベートメソッド等をregionで区切ることで、あとからソースを確認しやすくなるので、ぜひやってみてください。
参考URL
【Angular】HttpInterceptorの実装(Cookieベースセッション編)
概要
AngularのHttpリクエストの前後に共通処理を実装したい場合、HttpInterceptorを実装することで対応することが可能です。
用途としては以下のケースがありそうです。
- ログ出力
- HTTPヘッダーにトークンを設定
今回は前回の記事で紹介したAngularでのCookieベースセッション設定を共通化したいと思います。 kakkoyakakko2.hatenablog.com
動作環境
- Angular 6.0.0
サンプルソース
custom.interceptor.ts
import { Injectable } from '@angular/core'; import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; import { Observable } from 'rxjs'; @Injectable() export class CustomInterceptor implements HttpInterceptor { intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { // HttpRequestを複製。複製時にCookieベースセッションを必ずON const newReq = req.clone({ withCredentials: true }); return next.handle(newReq); } }
定義したインターセプターはModuleへの登録が必要です。
app.module.ts
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { CustomInterceptor } from './custom.interceptor'; @NgModule({ imports: [ HttpClientModule ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: CustomInterceptor, multi: true }, ] }) export class AppModule { }
終わりに
HttpClient実装前はHttpクラスを利用していました。Httpクラスにはインターセプター機能がないため、共通処理を実装したい場合はHttpクラスを継承して拡張するか拡張メソッドの定義が必要でした。 便利な時代になったものですね。
参考URL
【Angular】Cookieベースのセッション管理を実施
概要
AngularのHttpClient利用時は標準ではCookieベースのセッション管理が出来ません。 旧システムの認証ではCookieベースのセッション管理が必要になる場合があります。
対応方法としてはget、post等のメソッドの引数に withCredentials: true を設定することでCookieベースセッション管理が出来るようになります。 以下にサンプルを備忘録として残しておきます。
動作環境
- Angular 6.0.0
サンプルソース
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; @Injectable() export class SampleService { constructor(private http: HttpClient) { } getData(): Observable<string> { // CookieベースセッションON return this.http.get<string>('url', { withCredentials: true }); } }
終わりに
毎回設定するのが面倒な場合は、HttpInterceptorで共通設定が可能です。 そのあたりは次回あたりにも記載します。