Javascript *连接异步管道和热插口的ngFor回路是否可见?

Javascript *连接异步管道和热插口的ngFor回路是否可见?,javascript,angular,sockets,rxjs,Javascript,Angular,Sockets,Rxjs,假设我们使用*ngFor将警报呈现到列表中,如下所示: *ngFor="let alert of alerts | async" 是否可以使警报属性成为服务器推送到的热可观察对象,并导致包含警报的列表相应刷新?如果是这样,在这种类型的上下文中,哪种类型的可观察对象是合适的?异步管道为您订阅可观察对象,然后在不再需要时清理订阅。您可以将async管道应用于任何可观察的、热的或冷的,它将创建一个新订阅,以将该可观察的内容呈现到模板(或通过输入将其传递给子组件)。例如,假设我有一个警报$可观察: a

假设我们使用
*ngFor
将警报呈现到列表中,如下所示:

*ngFor="let alert of alerts | async"

是否可以使
警报
属性成为服务器推送到的热可观察对象,并导致包含警报的列表相应刷新?如果是这样,在这种类型的上下文中,哪种类型的可观察对象是合适的?

异步管道为您订阅可观察对象,然后在不再需要时清理订阅。您可以将
async
管道应用于任何可观察的、热的或冷的,它将创建一个新订阅,以将该可观察的内容呈现到模板(或通过输入将其传递给子组件)。例如,假设我有一个
警报$
可观察:

alerts$: Observable<Alert[]> = alertService.getAlerts();
并在
ngOnInit
lifecycle钩子中给它一个值

ngOnInit() {
  this.alertsSubScription = alerts$.subscribe((next: Alert[]) => {
    mostRecentAlert = next[0];
  }
}
ngOnDestroy() {
 this.alertsSubscription.unsubscribe();
}
然后在
ngondestory
lifecycle挂钩中清理它

ngOnInit() {
  this.alertsSubScription = alerts$.subscribe((next: Alert[]) => {
    mostRecentAlert = next[0];
  }
}
ngOnDestroy() {
 this.alertsSubscription.unsubscribe();
}
alerts$
现在在技术上是一个“热门”的可观察对象,因为它有一个活动订阅,但您仍然可以像以前一样在模板中使用它

简而言之,
async
管道只是一个方便的工具,用于订阅模板中的可观察对象。它允许您在不处理任何清理的情况下呈现异步数据


要回答您关于什么类型的可观测对象适合于这种情况的问题:无论何时您通过某种服务或存储获取数据(如果您使用的是ngrx或类似的东西),它都很可能以流的形式到达。即使Angular的Http实用程序也使用rxjs可观测值。这允许您使用所有功能强大的rxjs操作符将数据塑造成所需的形式,并在组件类中保留最终可观察的“冷”。然后只需在模板中抛出
async
管道,您就有了一种非常简洁的方法来呈现异步数据或将其传递到其他组件。

异步管道为您订阅可观察对象,然后在不再需要时清理订阅。您可以将
async
管道应用于任何可观察的、热的或冷的,它将创建一个新订阅,以将该可观察的内容呈现到模板(或通过输入将其传递给子组件)。例如,假设我有一个
警报$
可观察:

alerts$: Observable<Alert[]> = alertService.getAlerts();
并在
ngOnInit
lifecycle钩子中给它一个值

ngOnInit() {
  this.alertsSubScription = alerts$.subscribe((next: Alert[]) => {
    mostRecentAlert = next[0];
  }
}
ngOnDestroy() {
 this.alertsSubscription.unsubscribe();
}
然后在
ngondestory
lifecycle挂钩中清理它

ngOnInit() {
  this.alertsSubScription = alerts$.subscribe((next: Alert[]) => {
    mostRecentAlert = next[0];
  }
}
ngOnDestroy() {
 this.alertsSubscription.unsubscribe();
}
alerts$
现在在技术上是一个“热门”的可观察对象,因为它有一个活动订阅,但您仍然可以像以前一样在模板中使用它

简而言之,
async
管道只是一个方便的工具,用于订阅模板中的可观察对象。它允许您在不处理任何清理的情况下呈现异步数据


要回答您关于什么类型的可观测对象适合于这种情况的问题:无论何时您通过某种服务或存储获取数据(如果您使用的是ngrx或类似的东西),它都很可能以流的形式到达。即使Angular的Http实用程序也使用rxjs可观测值。这允许您使用所有功能强大的rxjs操作符将数据塑造成所需的形式,并在组件类中保留最终可观察的“冷”。然后在模板中抛出
async
管道,您就有了一种非常简洁的方法来呈现异步数据或将其传递到其他组件中。

这就是async管道所做的-打开可观察数据,并在收到新数据时进行更新。你有没有试过这个但不起作用?或者你只是想问你的方法在概念上是否正确?我希望有一个例子,在这个例子中,
Observable
ngOnInit()
中初始化,但与服务器保持联系并被服务器推送,从而导致表自动更新为新的警报。到目前为止,我看到的所有示例都通过发出一个新的http客户端rest请求来刷新Observable,用http请求返回的一个新的cold Observable替换Observable引用。在这种情况下,整个表似乎也必须重新提交。Angular是否有办法既接收对可观测对象的增量更新(即热更新,即它们正在添加到可观测对象的当前状态)而不替换它,又有办法仅呈现更新、添加和删除(我认为这就是react所做的……可能是另一个问题…react与不可变状态一起工作,因此它推动整个状态,这正是rxjs所做的。我相信它们的工作完全相同。通过使用“热”observable,你关闭了一个对象的引用,并修改了该对象,从而打破了不变性。这不是世界末日,但在做声明时,人们普遍认为应该尽可能使用不变性。在重新阅读你的请求后,听起来你想要一个带有
websocket
连接的observable,而不是对于http rest调用,是这样吗?这样,当新数据从服务器发布时,websocket连接将读取它并更新可观察数据,而不是在每次捕获数据时发出新的http请求。我理解正确吗?异步管道就是这样做的-打开可观察数据并在收到新数据时更新。Have您尝试了这个方法,但它不起作用?或者您只是在问您的方法在概念上是否正确?我希望有一个示例,其中
可观察的
ngOnInit()中初始化
,但仍与服务器保持联系并被服务器推送到,从而导致该表自动更新为新警报。到目前为止,我看到的所有示例都通过发出新的http客户端rest请求来刷新Observable,将Observable引用替换为从http请求返回的新cold Observable。这是错误的