对信号输入(角度)变化做出反应的最佳实践?

问题描述 投票:0回答:1

信号及其输入很棒。我很好奇是否有一种好方法可以使用

ngChanges()
rxjs-observables
甚至新的
effect()
之外的输入更改。

有没有一种方法可以在没有这三个的情况下对输入变化做出反应?

假设我们有一个组件“member”,它有一个输入“id”。每当“id”发生变化时,我想从“MemberService”重新加载数据。

ngChanges()
我会这样做:

@Input
id: number | undefined
ngOnChanges(changes: SimpleChanges) {
   if(changes.id) {
      this.memberSrv.load(this.id()).then((data: any) => this.data = data));
   }
}

新的

signals
像这样:

id = input.required<number>();
constructor() {
   effect(async ()=>
      this.data = await this.memberSrv.load(this.id())
   );
}

信号方法的缺陷是 this.id() 乍一看不可见。它在effect方法的某个地方。

我们还可以使用“asObservable”将信号包装在 rxjs-Observables 中,但随后我们依赖于 rxjs 并且信号仍然包装/“隐藏”在函数中:

asObservable(this.id)

有没有什么方法可以在不使用effect()或rxjs的情况下订阅输入?

对输入做出反应的最佳实践是什么?

angular rxjs observable signals
1个回答
0
投票

您可以使用

computed
,它与
effect
相同,并将为您提供数据列表作为信号。

但不确定你的意思

信号方法的缺陷是 this.id() 乍一看不可见。它在effect方法的某个地方。

id = input.required<number>();
data = computed(async () => {
    return await this.memberSrv.load(this.id());
});

或者你可以尝试一下。

data = computed(() => {
    return toSignal(this.memberSrv.load(this.id()));
});
© www.soinside.com 2019 - 2024. All rights reserved.