网站搜索

javascript - Angular 17 - 另一个信号的引用信号


我正在一个 HomeComponente 中工作,我正在从数据库中为两个数组提取数据,我正在使用信号来存储我的查询

aList=signal<A[]>([]) bList=signal<B[]>([])

我的组件显示我的数组项目列表,点击一个按钮列表会改变,所以我开发了一个 ReferenceSignal,只改变那个值以避免重复

listReference = signal<WritableSignal<A[] | B[]>>(aList)

我想问一下,这是一个好做法吗?如果我有一个信号存储对另一个信号的引用,信号内部是如何工作的?

谢谢

答案#1

我想问一下,这是一个好做法吗?如果我有一个信号存储对另一个信号的引用,信号内部是如何工作的?

不,你只是在嵌套信号,除非你找到一个非常好的理由去这样做,否则你可以用更简单的方式!我们可以使用 computed 信号,当其中的信号发生变化时,它会触发变化,这也可以更轻松地生成你需要的内容!

aList = signal<A[]>([]); // load data into signals at a later point of time!
bList = signal<B[]>([]); // load data into signals at a later point of time!
toggle = signal<string>('a'); // this signal can be used as trigger to toggle between the two signals a and b
listReference: WritableSignal<A[] | B[]> = computed(() => {
                                               const toggle = this.toggle();
                                               return toggle === 'a' ? this.aList() : this.bList();
                                           });

HTML

<button (click)="toggle.set(toggle() === 'a' ? 'b' : 'a')"> Toggle the views</button>