Rumah >hujung hadapan web >tutorial js >Suntikan Ketergantungan Sudut — Suntikan perkhidmatan dalam pengendali Rxjs tersuai

Suntikan Ketergantungan Sudut — Suntikan perkhidmatan dalam pengendali Rxjs tersuai

Barbara Streisand
Barbara Streisandasal
2024-12-07 18:57:13418semak imbas

Sudut ialah rangka kerja pendapat. Ia benar-benar teruja untuk melihat bagaimana ia mencapah ke arah fleksibiliti pembangun dan menjadi lebih kukuh dari hari ke hari. Saya percaya ia adalah era yang menggembirakan untuk pencinta Angular.

Suntikan kebergantungan dan RxJS — Pada pendapat saya, adalah ciri berkuasa yang menjadikan Angular unik dan fleksibel. Pengendali tersuai RxJS ialah cara terbaik untuk mengarang logik kompleks ke dalam fungsi boleh guna semula.

Baru-baru ini saya menjumpai usecase yang mana saya perlu mencipta operator RxJS tersuai yang menggunakan perkhidmatan untuk mencapai beberapa usecase yang kompleks.

Anda boleh menggunakan kaedah suntikan untuk mengakses contoh perkhidmatan yang diingini, suntikan mesti digunakan dalam konteks suntikan pergantungan. Untuk mencapai matlamat ini, pengendali Rxjs boleh didaftarkan sebagai InjectionToken yang menggunakan fungsi useFactory untuk menyatakan nilainya. Memandangkan useFactory ialah konteks suntikan, perkhidmatan boleh disuntik tanpa sebarang masalah menggunakan kaedah suntikan.

Mari lihat bagaimana perkhidmatan di bawah boleh disuntik dalam pengendali tersuai rxjs.

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

Pengendali RxJS tersuai di bawah hanya gandakan nilai yang diberikan dengan 2 menggunakan perkhidmatan Pengganda.

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)));
    },
  });

Kini pengendali tersuai boleh digunakan dalam komponen menggunakan penghias @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

Terdapat beberapa cara lain untuk mencapai kes penggunaan yang sama seperti mencipta perkhidmatan berasingan dan kaedah yang akan mengembalikan pengendali tersuai. Tetapi saya suka pendekatan InjectionToken kerana kebolehtahanannya sendiri. RxJS tidak akan ke mana-mana dalam masa terdekat walaupun dengan pengenalan isyarat jadi ia patut dicuba.

Anda boleh melihat contoh penuh berfungsi di sini.

Selamat Pengekodan...?

Atas ialah kandungan terperinci Suntikan Ketergantungan Sudut — Suntikan perkhidmatan dalam pengendali Rxjs tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn