javascript - 如何使用 ChangeDetectionStrategy 进行父子组件之间的数据更新
问题描述
我看过几个相关的主题ChangeDetectionStrategy
,但我对它的不同用法感到困惑。每当父组件上的数据发生更改时,我只想更新子组件中的数据。为此,我看到它changeDetection: ChangeDetectionStrategy.OnPush
被添加到Component
父字段中,但我不确定是否应该使用ChangeDetectorRef
参数或一些默认方法,例如ngDoCheck()
方法。那么,如何在父组件和子组件之间执行此操作?我应该明确添加来自父级的参数,还是自动更新@Input
变量?
import { Component,
Input,
ChangeDetectionStrategy,
ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ChildComponent {
@Input() data: string[];
constructor(private cd: ChangeDetectorRef) {}
refresh() {
this.cd.detectChanges();
}
}
解决方案
不同之处在于ChangeDetectionStrategy.OnPush
,您的组件只会在发生以下情况时检测到更改:
- 输入参考更改
- 源自组件或其子之一的事件
- 在视图中使用异步管道
- 显式运行变更检测
因此,如果您不更改输入的引用,则必须手动检测更改。这是显示和之间区别的stackblitzOnPush
Default
推荐阅读
- c# - c# 7.x 使用元组类型的短名称
- python - 重命名项目及其目录后,我需要做什么才能让 Django 单元测试在 PyCharm 中再次运行?
- java - Android 驻留菜单项禁用或隐藏?
- python - python []中的元素是什么
- url - 如何创建具有可变子域的 URL,例如 www.userspecified.example.com?
- html - 4x3 网格,两个项目双倍高度
- ruby - 在 Ruby 中压缩文件 - System vs Zlib?
- python - 仅舍入熊猫中的某些列
- swift - 我想在 Firebase 中向子节点添加一个节点,但是当我添加值时,它会删除以前发送到 Databse 的所有其他数据 - Swift
- python - 数组长度与索引长度不匹配