这在本代码示例中使用https://stackblitz.com/angular/jdamnnmgrae?file=app/autocomplete-概述-example.ts。
有问题的代码段是:
<mat-option *ngFor="let state of filteredStates | async" [value]="state.name">
我还没有见过这种语法,所以我很困惑它是做什么的。当我删除异步调用时,代码不再工作,所以我需要理解它。
我相信这段代码正在创建一个被发送到异步管道的可观测对象列表,但是我还没有看到Angular文档中记录的位置。如果你知道请回复。
import {map} from 'rxjs/operators/map';
export class AutocompleteOverviewExample {
// . . . other stuff omitted
filteredStates: Observable<any[]>;
constructor() {
this.filteredStates = this.stateCtrl.valueChanges
.pipe(
startWith(''),
map(state => state ? this.filterStates(state) : this.states.slice())
);
因此,for循环可能会在可观察对象上循环,因为异步管道接受promise或可观察,而不是promise。:-)
有用链接:
>
https://angular.io/api/common/AsyncPipe
https://angular.io/guide/rx-library-用于地图,过滤器
FormControl.value更改的https://angular.io/api/forms/FormControl
https://angular.io/guide/observables
我还无法从FormControl.valueChanges中找到管道的使用方法,但希望在回答这个问题后这一点会变得清晰。
(Q) 有人能给我指出一些解释“*ngFor | async”语法含义的角度文档吗?或者提供一个解释。
搜索答案显示了这些结果
>
在ngFor中使用异步管道对可观测的(角)-更多的语法我不明白。
https://blog.thoughtram.io/angular/2017/02/27/three-things-you-didnt-know-about-the-async-pipe.html -这似乎是我问题的答案。但既然我花了这么多时间写,我还是会把它贴出来。
filteredStates的let state | async
语法可以这样理解:
let state of (filteredStates | async)
async
管道应用于filteredStates
变量,而不是整个for
循环。
我认为,在查看了所有其他资源之后,这一点应该是显而易见的,但是async
管道非常有用,因为它将为您订阅可观察的内容(另外还将清理订阅,这样您就不必担心取消订阅)。
所以,发生的事情是Angular订阅了你的filteredState
可观察的。每次从您的可观察列表流式传输新列表时,Angular*ngFor
指令将循环遍历流式传输的列表。
如果没有async管道,您只需订阅组件中可观察到的filteredState
,并将列表存储为组件上的属性(然后您将循环使用filteredState|async
)。注意:有几种方法可以处理退订,这只是一种方法。
<mat-option *ngFor="let state of filteredStates" [value]="state.name">
class AutocompleteOverviewExample {
filteredStates: State[] = [];
subscription: Subscription = null;
constructor() {
this.subscription = this.stateCtrl.valueChanges
.pipe(
startWith(''),
map(state => state ? this.filterStates(state) : this.states.slice())
)
.subscribe(states => this.filteredStates = states);
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
this.subscription = null;
}
}
}
问题内容: 在Swift中,有时会使用这种模式。 这种模式的目的很明确。在全局线程中执行耗时的计算,以使UI不会被锁定,并在计算完成后更新主线程中的UI。 如果没有什么要计算怎么办?我刚刚在我的项目中发现了一个逻辑 崩溃但 不会崩溃。 它们有何不同?情况 B 与此不同吗? 还有一个问题。我知道主线程是串行队列,但是如果我在多个线程中运行多个代码块,它的工作方式就像并发队列。 如果主线程确实是一个串
问题内容: 我是Angular JS的初学者。我正在通过下面的链接。 http://docs.angularjs.org/tutorial/step_00 引导文件是什么? 他们在哪里? 什么是自动引导和引导的手动初始化?我从链接http://docs.angularjs.org/guide/bootstrap中阅读了如下所示的手动初始化的缺点。 谁能解释一下这里的缺点是什么? 问题答案: 尽管上
问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如
问题内容: 什么是在这个CSS规则是什么意思? 问题答案: 是相邻的同级组合器。 这意味着选择只选择自带 之后 的。 插图: 选择了什么,没有选择什么: 选择 这个来之后第一。 未选择 这出现在第一后而不是在。由于它不会立即跟随,因此未选中。 但是,由于它仍然紧随元素之后,选择器不会立即匹配此元素,而是将使用通用的同级组合器来匹配该元素。 未选择 这位于内,并且在引号内没有满足其选择器的内容。
问题内容: 我想知道 = + _ 运算符在JavaScript中的含义。看起来像是在做作业。 例: 问题答案: r = +_; 尝试将任何内容强制转换为数字。 只是一个变量名(不是运算符),可以是,等等。 例: 将“ 1”强制转换为纯数字1。 现在,不是。 此外,根据算术运算符的MDN页面: 一元加号运算符位于其操作数之前,并求值为其操作数,但是 尝试将其转换为数字(如果尚未转换为数字) 。 […
问题内容: 嗨,我遇到了以下代码 这到底是怎么回事?我不确定“&”在做什么。 问题答案: 回答 该符号是按位与运算符。与1一起使用时,基本上会屏蔽该值以提取最低位,换句话说,它将告诉您该值是偶数还是奇数。 有关Python运算符的更多信息 有关更多信息,请参见:http : //wiki.python.org/moin/BitwiseOperators 为什么检查奇数与偶数比较有效 编辑:添加此部