- 来自Angular团队的说明*:我们将此问题视为
AsyncIterable
在AsyncPipe
中的功能请求。
描述
Angular可以在其ngFor
指令中渲染原生的Iterable
,但不能渲染AsyncIterable
,当我们向这样的类型添加| async
过滤器时会报错。
建议的解决方案
AsyncIterable
应该与| async
过滤器一起支持,就像任何其他Observable
一样。
考虑的其他方案
将原生的AsyncIterable
Package 到RXJS可观察对象中,只是为了使其能够在HTML渲染引擎中使用-这并不理想,并且为原生类型创建了不必要的开销,这会增加订阅逻辑(AsyncIterable
更简单,不需要任何订阅逻辑)
**后想:**它不仅应该与ngFor
一起工作,而且应该适用于所有适用| async
过滤器的地方。
6条答案
按热度按时间pbpqsu0x1#
这个功能请求现在已经成为我们的待办事项候选!在接下来的阶段,社区有60天的时间进行投票。如果请求获得超过20票的赞成,我们将把它移到我们的考虑列表中。
你可以在我们的文档中找到更多关于功能请求流程的详细信息。
tct7dpnv2#
我认为在这里
Observable
和AsyncIterator
之间的比较是有误导性的。NgFor
需要一个同步数组进行渲染,即使该数组是异步生成的。也就是说,在调用*ngFor="let item of items$ | async"
时,items$
必须是一个Observable
类型的可迭代对象,例如一个Item[]
数组。如果NgFor
本身不是可迭代的,那么就不可能使用async
管道来遍历Observable<Item>
。Angular可能支持使用
AsyncIterable
与async
管道而不是Observable
,但NgFor
始终需要一个同步的可迭代值。我将把这个问题的标题改为“在
AsyncPipe
中支持AsyncIterable
”,我认为这是这里真正的功能请求。anauzrmj3#
请注意,我们已经开始了针对您的功能请求的社区投票过程。距离投票过程结束还有20天。
有关Angular功能请求流程的更多详细信息,请参阅我们的文档。
kmbjn2e34#
感谢您提交您的功能请求!看起来在投票过程中,它没有收集到足够的票数进入下一阶段。
我们希望保持Angular丰富且符合人体工程学,同时关注其范围和学习过程。如果您认为您的请求可能超出了Angular的范围,我们鼓励您与community合作,将其发布为开源项目package。
您可以在我们的文档中找到有关功能请求过程的更多详细信息。
xkrw2x1b5#
我认为在这里
Observable
和AsyncIterator
之间的比较是有误导性的。我认为很多人认为这是有误导性的。这个问题从一开始就问到了AsyncIterable
,而不是AsyncIterator
。老实说,我不明白为什么会出现任何复杂性。对于已经支持
Observable
的任何事物,添加对AsyncIterable
的支持应该是轻而易举的。在我的项目中,我到处都在使用iter-ops,因为我想要最好的性能,而且我不想在除了Angular视图内部之外的任何地方使用像
Observable
这样的合成原始类型,因为它们并不自然地支持可迭代。在这个时代,我觉得这相当奇怪,公平地说。68de4m5k6#
以下是一个非常简化的例子,展示了我不得不采用的解决方法:
下面的组件每秒更新一次数字列表:
然后是消费它的视图:
所以我不得不为视图数据保留一个额外的变量,并遍历源数据来更新视图数据。
如果我们在Angular中支持
AsyncIterable
,我可以直接在视图中使用source | async
。