首頁 > web前端 > js教程 > Angular 依賴注入-在自訂 Rxjs 運算子中註入服務

Angular 依賴注入-在自訂 Rxjs 運算子中註入服務

Barbara Streisand
發布: 2024-12-07 18:57:13
原創
370 人瀏覽過

Angular 是一個自以為是的框架。看到它如何朝著開發人員的靈活性發展並日益強大,真是令人興奮。我相信這對 Angular 愛好者來說是一個幸福的時代。

依賴注入和 RxJS — 在我看來,它們是強大的功能,使 Angular 變得獨特且靈活。 RxJS 自訂運算子是將複雜邏輯組合成可重複使用函數的好方法。

最近我遇到了一個用例,我需要建立一個自訂 RxJS 運算符,它使用服務來實作一些複雜的用例。

您可以使用注入方法來存取所需的服務實例,但注入必須在依賴注入上下文中使用。為了實現這一點,Rxjs 運算子可以註冊為 InjectionToken,它使用 useFactory 函數來實例化其值。由於useFactory是注入上下文,因此使用inject方法可以毫無問題地註入服務。

讓我們看看如何將以下服務注入到 rxjs 自訂運算子中。

// Service
@Injectable({
  providedIn: 'root',
})
export class Multiplier {
  public transfrom(val: number) {
    return val * 2;
  }
}
登入後複製

下面的自訂 RxJS 運算子只需使用乘數服務將給定值乘以 2。

import { inject, InjectionToken } from '@angular/core';
import { Multiplier } from '../services/multiplier';
import { map, OperatorFunction, pipe } from 'rxjs';

export const MULTIPLIER_OPERATOR: InjectionToken<OperatorFunction<number, number>>
  = new InjectionToken('Multipler operator', {
    factory(): OperatorFunction<number, number> {
      const multipler = inject(Multiplier); // injected Multipler service
      return pipe(map((x: number) => multipler.transfrom(x)));
    },
  });
登入後複製

現在可以使用 @Inject 裝飾器在元件中使用自訂運算子。

import { Component, Inject } from '@angular/core';
import { BehaviorSubject, Observable, of, OperatorFunction } from 'rxjs';
import { MULTIPLIER_OPERATOR } from './rxjs-operators/custom';
import { CommonModule } from '@angular/common';

export class App {
  private _count = 1;
  public base = new BehaviorSubject(this._count);
  public val = new Observable();

  constructor(
    @Inject(MULTIPLIER_OPERATOR) // injected custom operator
    private multiplier: OperatorFunction<number, number>) {
      this.val = this.base.pipe(this.multiplier); // used rxjs operator
  }

  .....
}
登入後複製

Angular Dependency Injection — Inject service inside custom Rxjs operators

還有其他幾種方法可以實現相同的用例,例如建立單獨的服務和傳回自訂運算符的方法。但我喜歡 InjectionToken 方法,因為它具有自我包容性。即使引入了信號,RxJS 在不久的將來也不會取得任何進展,因此值得嘗試一下。

您可以在此處查看完整的工作範例。

編碼愉快…?

以上是Angular 依賴注入-在自訂 Rxjs 運算子中註入服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板