这样做有什么区别、优势或正确的方法吗?
假设我有一个可观察的,我可以从后端调用、服务或通过GUI事件(如滚动事件)接收它。
我在模板中有一个属性,它取决于可观察到的。我正计划通过一个信号为那处房产提供价值。
所以我想通过我的可观察到的,每当它收到一个值时,把这个值传递给那个信号。
我发现了两种通过可观察到的来为信号提供价值的方法:-
-
通过修改可观察到的订阅方法内部的信号值。
-
通过将可观察到的转换为信号并直接使用该信号。
演示两种方式的最小示例:-
Example On Stackblitz
import { Component, EventEmitter, OnDestroy, OnInit, Signal, signal } from '@angular/core';
import { toSignal } from "@angular/core/rxjs-interop";
@Component({
selector: 'app-app',
standalone: true,
imports: [],
templateUrl: './app.component.html',
styleUrl: './app.component.css'
})
export class AppComponent implements OnInit {
// First Way
nonToSignalButtonClick$ = new EventEmitter<number>();
signalVar = signal<number>(-1);
// Second Way
toSignalButtonClick$ = new EventEmitter<number>();
signalVarThroughToSignal = toSignal(this.toSignalButtonClick$, {initialValue: -1});
ngOnInit() {
// First Way
this.nonToSignalButtonClick$.subscribe((v) => this.signalVar.update(initial => initial + v));
}
onDirectClick() {
this.signalVar.update(initial => initial + 1);
}
// First Way
onObservableClick() {
this.nonToSignalButtonClick$.emit(1);
}
// Second Way
onObservableToSignalClick() {
this.toSignalButtonClick$.emit(this.signalVarThroughToSignal() + 1);
}
}
<h1>{{ signalVar() }}</h1>
<button (click)="onDirectClick()">Direct Signal Incrase</button>
<hr />
<button (click)="onObservableClick()">Signal Increase Through Observable</button>
<hr />
<h1>Through toSignal: {{ signalVarThroughToSignal() }}</h1>
<button (click)="onObservableToSignalClick()">Signal Increase Through Observable converted to Signal</button>
使用一种方法与使用另一种方法相比有什么优势或区别吗?谢谢