javascript - 使用 onPush 检测策略在超时中改变数字
问题描述
我想设置一个参数的默认值并在 2 秒后对其进行变异,这就是我所拥有的:
@Input() num: number;
ngOnInit() {
this.num = 1;
setTimeout(() => ++this.num, 2000);
}
在视图中:
{{ num }}
它与默认检测策略完美配合,但是当我添加changeDetection: ChangeDetectionStrategy.OnPush
到组件装饰器时停止工作(值始终1
并且永远不会改变)。
为什么呢?我认为onPush
策略只比较引用,分配一个新的整数总是会改变一个引用?
解决方案
OnPush
@Input
当属性从父组件更改时,策略会检测更改。您可以注入ChangeDetectorRef
您的组件。您可能会发现这篇文章很有帮助。
@Input() num: number;
constructor(private cdr: ChangeDetectorRef){}
ngOnInit() {
this.num = 1;
setTimeout(() => {
++this.num, 2000;
this.cdr.detectChanges();
});
}
推荐阅读
- java - 具有组合参数的 JUnit 参数化测试(或者我应该分解测试)
- python - 插入mysql数据库不提交更改(python)
- powershell - 无效的 URL 与未找到
- angular - ReferenceError:未定义gapi,但我尝试了一切
- aws-documentdb - AWS DocumentDB 中 TTL 删除操作的审计跟踪?
- ios - 快速更改按钮位置不起作用
- r - 比较数据框和列表并划分数据是否存在于R中的df中
- c++ - 如何使用 std::source_location 禁用构造函数的复制省略?
- questdb - QuestDB 中有 LAG 功能吗?
- javascript - 如何在查询参数更改时重用路由,而不是在 Angular 中的路径参数更改时重用路由?