在我的角度应用程序中,我将状态存储在单例服务的信号中。如果我的应用程序的组件/服务需要此状态,它只需注入服务并“绑定”到信号。就我而言,状态是列表。我将列表的类型定义为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 正在用他们的一些信号做同样的事情:
input.required
并尝试在组件构造函数中访问它,您将收到错误。 (因为它只是稍后初始化,在OnInit
之前)。viewChild.required
并尝试在 AfterViewInit
生命周期挂钩之前访问它,您也会收到错误。所以,就代码气味或不良实践而言 - 我认为不是。问题是这是一项相当新的技术,因此还没有具体的最佳实践。我发现一些 UDEMY 课程讨论了使用角度信号时的最佳实践。您可以检查一下其中是否有适合您的情况。
我希望这有帮助。