angular - onPush 更改检测的问题
问题描述
我正在尝试在我的一个组件中实现 onPush 更改检测
组件.html
<ul>
<li *ngFor="let data of data" [innerHTML]="getName(data)"></li>
</ul>
组件.ts
getData() {
this._store.select('data')
.subscribe(result => {
this.DATA = result;
this.sortData();
});
}
getFilters() {
this._store.select('filters')
.subscribe(result => {
this.filters = result;
this.sortData();
});
}
sortData() {
this.data = Array.from(new Set(this.DATA.filter(x => ... filters));
}
getName(data) {
return `Super Cool ${data.name}`;
}
但我似乎无法弄清楚。
基本上我有数据进入,用户可以过滤这些数据,现在每次过滤数据或收到新数据时,它应该触发 onPush 更改检测并更新 html 页面上的列表。但它不起作用。 .
现在我知道异步管道但我不确定在这种情况下我将如何实现它
任何帮助,将不胜感激
编辑
我知道要触发更改检测,您需要更新对象引用,但这不是什么
this.data = Array.from(new Set(this.DATA.filter(x => ... filters));`
是在做??
解决方案
对象更改不会在推送更改检测时触发,这仅适用于组件输入。你想要在这里做的是使用异步管道
ngOnInit() {
this.data$ = this._store.select('data').pipe(
map(d => Array.from(new Set(d)))
)
}
然后在您需要数据的某个地方的模板中:
<ng-container *ngIf=“data$ | async as DATA”>
异步管道总是在推送时触发
推荐阅读
- sql - 如何在 oracle 的第二个表中插入第一个表运行时间值?
- amazon-web-services - 如何将多部分表单数据保存到 AWS Lambda 中的文件
- python - 删除停用词 Python
- ansible - 将多个 ansible-vault 加密文件复制到远程服务器
- spring-batch - 处理后如何将文件移动到存档和错误文件夹
- intellij-idea - elm-package.json 无法加载
- javascript - 在 JavaScript AJAX 响应的下拉列表中获取重复值
- android - Android Pie 无法解析主机
- deep-learning - 使用 cntk 检查点进行预测
- angular - 在 Observable 数组中查找 Observable