与功能请求相关的@angular/*包有哪些?
core
描述
因为没有人回应我上一个功能请求的第二条评论,所以我打开了一个新的功能请求以获得关于它的意见和建议。
我还阅读了 blog post 关于可延迟视图的文章,尤其是最后部分 "展望未来",其中提到社区对将延迟与数据获取结合感兴趣。
我对这个非常感兴趣,所以这是我的想法:
一个新的 @async
块,其基本工作原理类似于异步管道,但具有额外的支持 @loading
和 @error
块的功能。
要清楚地说明,这不会懒加载已使用的组件,而是会正常加载它们。为此目的,我一直在考虑为 @defer
块引入一个新的触发器:on fetch
,但那可能是另一个功能请求的主题。
建议的解决方案
@async (entries; as results) {
@for (entry of results; track entry.id) {
<p>{{ entry.title }}</p>
} @empty {
<p>No entries</p>
}
} @loading (minimum 200ms) {
<p>Loading</p>
} @error {
<p>Something went wrong</p>
}
6条答案
按热度按时间lc8prwob1#
你是否认为它是一种替代async pipe的方式,即它以可观察对象作为输入?如果是这样的话,@Loading会做什么?它似乎只对解决promise有意义,而不是可观察对象。
91zkwejq2#
你是否认为它是一种替代async pipe的方法,即它接受observables作为输入?如果是这样的话,@Loading会做什么?它似乎只对解决promise有意义,而不是observables。
为什么?目前async pipe总是将
| null
添加到类型中,而async
管道可以等待observable发出。但我实际上想用$completed
扩展这个语法。这来自NgRx Let pipe。一个区别是他们使用
suspense
术语而不是loading
。当然,
@async
也可以与Promise
1:1地工作!一个问题是,如果Angular开发人员不想切断模板与RxJs的联系,并引导人们更多地使用
toSignal()
,当然,如果信号被使用,那么我们就可以获得更细粒度的变化检测的好处!所以最后,我认为
@async
看起来很好,但只适合坚持使用RxJs的人或希望在大型、难以移植的基于RxJs的仓库中获得更清晰的语法的人。2ul0zpep3#
这个功能请求现在已经成为我们的待办事项候选!在接下来的阶段,社区有60天的时间进行投票。如果请求获得超过20票的赞成,我们将把它移到我们的考虑列表中。
你可以在我们的文档中找到更多关于功能请求流程的详细信息。
ua4mk5z44#
这正是我所期待的,类似于SolidJS中的Suspense块,并暴露其他块,如@Loading、@error、@Placeholder(类似于@defer,但纯粹用于数据获取)。
绑定到此@async/@Suspense块的信号/Promise/Observable(很可能是信号)应暴露由数据获取抛出的错误对象,以便在错误块中显示相关的错误消息。
zyfwsgd65#
你还需要考虑多次请求的数据。例如,如果用户更改了一些表单值,下载必须重新开始。这可以通过使用@async接受信号或线程来实现:
vi4fp9gy6#
错误应该可以捕获。