javascript - Angular 6,类变量在完成之前不会从(更改)调用的方法内部更新
问题描述
我正在尝试创建一个搜索框,当输入值更改或用户单击搜索图标时,它应该执行以下操作。
设置
searchText
字段的值。这用于搜索,也用于控制在搜索输入框旁边显示哪个图标(搜索 | 清除)。在搜索之前,该字段的值
previewTableLoading
设置为 true,在模板中用于显示微调器。经过耗时的搜索过程后,该字段的值
previewTableLoading
被设置回 false 以停止微调器。
这是搜索框的模板 -
<div class="ui icon input">
<input type="text" (change)="onSearchFieldChange($event)" placeholder="Search Fields..." #searchInput>
<i class="search link icon" (click)="searchInput.change()" *ngIf="!searchText || searchText === ''"></i>
<i class="times link icon" (click)="clearSearch()" *ngIf="searchText && searchText !== ''"></i>
</div>
这是实现代码 -
onSearchFieldChange(event) {
this.searchText = event.target.value;
this.search();
}
search() {
this.previewTableLoading = true;
// SOME HEAVY SEARCHING ALGORITHM THAT TAKES TIME
this.previewTableLoading = false;
}
clearSearch() {
this.searchText = '';
this.search();
}
问题:
当输入值改变时,字段的值previewTableLoading
不会立即更新。它等待整个search
方法完成。这就是为什么绑定到该字段的微调器从未出现的原因。我觉得模板中的方法调用是同步执行的,并且该方法中的所有更新仅在方法完成时才生效。
我希望我清楚地解释了我的问题。如果有人能帮助我理解这个问题,那就太好了。谢谢。
解决方案
这将是使用 Observable 的好时机。
我不确定您是如何进行搜索的,但可以说您正在调用一些您拥有的服务,该服务返回一个可观察的(即 http 请求)
onSearchChange(event) {
this.search(event.target.value);
}
search(searchTerm) {
this.previewTableLoading = true;
this.searchService.search(searchTerm)
.subscribe( (results) => {
//this is the result set that we get back
this.resultSet = results;
this.previewTableLoading = false;
});
}
推荐阅读
- java - 创建新对象以替换不可变对象中的值
- python - 有没有办法根据一个字典中的值小于另一个字典中的相同键来过滤字典列表?
- python - 计算文本文件中的单词对 [Python]
- mongodb - MongoDB Atlas 计划触发服务返回未定义
- javascript - Chromium console.error 内部实现 - 是什么导致错误堆栈中文件的超链接路径?
- postgresql - Sqlalchemy 相交和除外
- excel - VBA:使用 .Find 方法查找第一个和第二个值的出现
- c - if 语句中的声明
- python - ModuleNotFoundError:加载到我的 Heroku 应用程序时没有名为“streamlit”的模块
- c# - System.InvalidOperationException:'没有找到类型 CommandContext 的类型读取器,必须指定一个'