如何确保我的角度状态在被我的应用程序的组件/服务访问之前已初始化?

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

在我的角度应用程序中,我将状态存储在单例服务的信号中。如果我的应用程序的组件/服务需要此状态,它只需注入服务并“绑定”到信号。就我而言,状态是列表。我将列表的类型定义为list或null。 null 的目的是消除列表为空(因为没有数据)和列表为空(因为数据尚未初始化)之间的歧义。因此,我将状态默认为 null,一旦初始化,状态就变成一个列表。我不希望我的组件检查 null,我只希望它们处理列表。我还希望应用程序在组件访问空状态时抛出错误。为了实现这些要求,我想出了以下解决方案:

    private _items = signal<Item[] | null>(null);
    items = computed(() => {
        const items = this._items();
        if (!items) {
            throw new Error("The items have not been initialised");
        }

        return items;
    })

上面的代码是在我的单例服务中。组件访问

items
信号。

我想知道我的解决方案是否被认为是最佳实践,或者是否有我错过的任何微妙的陷阱。

angular signals state-management
1个回答
0
投票

我不认为这是一种不好的做法,因为 Angular 正在用他们的一些信号做同样的事情:

  1. 如果您使用
    input.required
    并尝试在组件构造函数中访问它,您将收到错误。 (因为它只是稍后初始化,在
    OnInit
    之前)。
  2. 如果您使用
    viewChild.required
    并尝试在
    AfterViewInit
    生命周期挂钩之前访问它,您也会收到错误。

所以,就代码气味或不良实践而言 - 我认为不是。问题是这是一项相当新的技术,因此还没有具体的最佳实践。我发现一些 UDEMY 课程讨论了使用角度信号时的最佳实践。您可以检查一下其中是否有适合您的情况。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.