1
<time-shift-input
[start]="editingUser.defaultStart"
[startLabel]="'profile.defaultStart' | translate "
[end]="editingUser.defaultEnd"
[endLabel]="'profile.defaultEnd' | translate "
(onChange)="onShiftTimes($event)"></time-shift-input>
<input type="hidden" name="defaultStart" [ngModel]="editingUser.defaultStart">
<input type="hidden" name="defaultEnd" [ngModel]="editingUser.defaultEnd">
这里是部件
onShiftTimes(e) {
if (!e.errors) {
this.editingUser.defaultStart = e.start;
this.editingUser.defaultEnd = e.end;
}
}
ngOnInit() {
this.profileForm.valueChanges.subscribe(() => {
if (this.profileForm.dirty) {
this.saveComponent.hasNew(true);
if (this.profileForm.valid) {
this.saveComponent.enabled = true;
}
} else {
this.saveComponent.hasNew(false);
this.saveComponent.enabled = false;
}
});
}
时移输入组件发出一个事件,组分调用onShiftTimes方法,所述形式触发valueChanges,然而形式仍然是脏:假,原始:真
为什么?
您可以检查是否'defaultStart'和'defaultEnd'真正得到列入形式?尝试访问父'ngForm'对象的'controls'属性,甚至访问其'value'属性,看看它们是否在那里。如果它们不是,它可能与它们隐藏的事实有关,或者根本不受双向约束。 – Amit
在阅读完之后 - http://stackoverflow.com/questions/39913255/ngonchanges-not-firing-when-attribute-changed-by-observable-subscrption - 我已经添加了两个setter方法的两个属性。是的,当我打印form.value时,值正在按预期更新。在我处理字符串时,我甚至添加了'''+ this.editingUser.defaultStart',因此基本上不返回对现有值的引用,而是返回一个新值。问题依然存在。 – pop