当前位置: 首页 > 知识库问答 >
问题:

如何检测Angular中属性的更改

罗光华
2023-03-14

我有一个带有子组件时间线的组件。

<app-timeline [(editing)]="editingDate"></app-timeline>

在时间轴组件中,我有这些属性:

@Input() editing: boolean; // <--- detect change on this
@Output() editingChange = new EventEmitter();

如何检查何时从时间轴组件对编辑属性进行更改?每当编辑值发生更改时,我都需要发出该值。

我应该为编辑属性使用一个setter,然后从那里发出吗?

private _editing
set editing() { ... // emit }

或者有其他方法吗?

共有2个答案

陈俊誉
2023-03-14

我不认为你需要双向绑定(同样,这取决于你和要求)

只需使用属性绑定代替…

<app-timeline [editing]="editingDate"></app-timeline>

每当< code>editing设置时,您必须发出< code>Output()

@Output() editingChange = new EventEmitter();

public get editing(): boolean {
   return this._editing;
}

@Input()
public set editing(edit: boolean) {
    if (edit) {
        this._editing = edit;
        this.editingChange.emit("something");
    }
}
田兴怀
2023-03-14

ngOnChanges可用于此目的

首先确保您的组件实现了这样的 ngOn 更改

export class TimelineComponent implements OnChanges

然后像这样实现ngOnChange方法

ngOnChanges(changes: SimpleChanges) {
    if (changes.editing) {
        console.log(changes.editing.currentValue);
    }
}

任何输入更改时,都将进入ngOnChanges方法。这也是添加if语句的原因,因为如果更改了任何其他输入,编辑属性将不存在于changesobject上。

对于原始值,它将在任何变化时触发。对于引用值,您需要更改实际的引用,仅仅更改输入中对象的属性是不行的。

 类似资料:
  • 我有一个父组件,它使用ajax请求检索对象数组。 该组件有两个子组件:一个以树结构显示对象,另一个以表格格式呈现其内容。父元素通过@input属性将数组传递给它们的子元素,子元素可以正确地显示内容。一切如预期。 当您更改对象中的某些字段时,就会出现问题:子组件不会收到这些更改的通知。只有当您手动将数组重新分配给其变量时,才会触发更改。 我已经习惯了使用Knockout JS,我需要获得类似于obs

  • 问题内容: 我在HTML中创建了一个属性,该属性动态地填充了信息。 有没有一种方法可以检测属性值何时更改? 问题答案: 您将必须注意DOM节点的更改。有一个名为的API,但似乎对其的支持非常有限。这样的答案有一个指向API状态的链接,但是到目前为止,似乎在IE或Opera中都不支持它。 解决该问题的一种方法是让修改属性的代码部分分派一个您可以侦听的事件。 这里的代码是

  • 问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入

  • 我想使用JaVers来跟踪我的Java对象的更改。基本示例工作正常,但我无法让它检测存储在集合中的对象的更改。 如果我扩展ChangeLogExample。更改例如其中一个子坐标的课堂示例: 这是打印的更改日志: 因此,第一个下属的年龄变化不会显示在变更日志中。 使用withChildValueObjects()没有什么不同。 当我单独将更改提交给员工实例时,我会得到学员年龄的更改,但这不是我想要

  • 假设我有一个名为Ben的属性文件,其中包含以下属性: 我通过在测试步骤中键入其相对路径手动将此属性文件导入属性测试步骤。然后我有一个测试用例,它从文件中输入名称并确保它返回的输出是正确的头发和眼睛。现在,我想测试的不仅仅是一个人。假设我有另一个名为Jake的属性文件: 如果我想切换属性文件,我知道的唯一方法是在我想运行新测试时手动输入该属性文件的路径。我有没有办法实现一个Groovy脚本,在属性测