Angular 子属性的更改通知
Angular change notification on subproperty
我的 Angular 5 应用程序中有一个子组件执行双向绑定,并且绑定工作正常。我在了解父控制器中的更改时遇到了一些问题。在父组件中,我像这样使用子组件:
<app-lab-hazard-classification-question-group
primaryQuestion="Does the lab contain mechanical tools?"
[(primaryValue)]="lab.hazardClassificationDetails.mechanicalExists"></app-lab-hazard-classification-question-group>
lab
变量是父控件的 @Input()
。当我评估 lab.hazardClassificationDetails.mechanicalExists
的值时,它由子组件正确设置。不过,我需要知道,在父控件中,该值何时被修改。因为 lab
变量本身并没有改变,所以实际上并没有调用 ngOnChanges
方法。
我是否必须向子控制器添加一个 (change)
项并显式绑定它以便收到更改通知?我希望有一种更通用的方式,因为我有大约 10 个这样的子元素,我不在乎 "what" 值它变成了什么,只是它确实改变了。
子组件的 .ts 文件有这个:
@Input() primaryValue: boolean;
@Output() primaryValueChange = new EventEmitter();
onPrimaryChanged(): void {
this.primaryValueChange.emit(this.primaryValue);
}
而 HTML 有这样的东西:
<select class="form-control" id="primary" name="primary" required
[(ngModel)]="primaryValue"
(change)="onPrimaryChanged()">
<option [ngValue]="null || undefined">-- Select --</option>
<option [ngValue]="true">Yes</option>
<option [ngValue]="false">No</option>
</select>
一个好的方法是在值更改的情况下从子组件向父组件发出带有 EventEmitter
的事件。
我的 Angular 5 应用程序中有一个子组件执行双向绑定,并且绑定工作正常。我在了解父控制器中的更改时遇到了一些问题。在父组件中,我像这样使用子组件:
<app-lab-hazard-classification-question-group
primaryQuestion="Does the lab contain mechanical tools?"
[(primaryValue)]="lab.hazardClassificationDetails.mechanicalExists"></app-lab-hazard-classification-question-group>
lab
变量是父控件的 @Input()
。当我评估 lab.hazardClassificationDetails.mechanicalExists
的值时,它由子组件正确设置。不过,我需要知道,在父控件中,该值何时被修改。因为 lab
变量本身并没有改变,所以实际上并没有调用 ngOnChanges
方法。
我是否必须向子控制器添加一个 (change)
项并显式绑定它以便收到更改通知?我希望有一种更通用的方式,因为我有大约 10 个这样的子元素,我不在乎 "what" 值它变成了什么,只是它确实改变了。
子组件的 .ts 文件有这个:
@Input() primaryValue: boolean;
@Output() primaryValueChange = new EventEmitter();
onPrimaryChanged(): void {
this.primaryValueChange.emit(this.primaryValue);
}
而 HTML 有这样的东西:
<select class="form-control" id="primary" name="primary" required
[(ngModel)]="primaryValue"
(change)="onPrimaryChanged()">
<option [ngValue]="null || undefined">-- Select --</option>
<option [ngValue]="true">Yes</option>
<option [ngValue]="false">No</option>
</select>
一个好的方法是在值更改的情况下从子组件向父组件发出带有 EventEmitter
的事件。