【发布时间】:2019-11-21 04:21:02
【问题描述】:
我有自定义单选列表,每个控件都有不同的控件名称(这些控件是 html 中的复选框)认为来自这些复选框的列表(输入名称)只能选择一个,我做这样的事情(在 ngOnInit 中) :
formGroup
.get('ChildGroup')
.valueChanges.pipe(
startWith(formGroup.get('ChildGroup').getRawValue()),
pairwise(),
)
.subscribe(([oldState, newState]) => {
console.log(oldState, newState)
// List of radio checkboxes
const radioInputs = [
'childName1', 'childName2', 'childName3', 'childName4',
];
// Find changed value
const updatedElementName = radioInputs.find(
elem => oldState[elem] !== newState[elem],
);
// Set true only for input which is changed
radioInputs.forEach(input => {
formGroup
.get('ChildGroup')
.get(input)
.setValue(
updatedElementName === input, { emitEvent: false },
);
});
});
问题很奇怪,因为在单击复选框后,我从日志中收到了这样的数据:
// First click on childName2 (childName1 unchecked) - correct, expected
oldState.childName1 // true
oldState.childName2 // false
newState.childName1 // true
newState.childName2 // true
// Second click on childName1 (childName1 and childName2 unchecked)
oldState.childName1 // true
oldState.childName2 // true
newState.childName1 // true
newState.childName2 // true
oldState.childName1 在第二次点击中的值并不像预期的那样为假,即使我在第一次点击后在 valueChanges 订阅中使用了 setValue on false。
存在此错误的 Stackblitz:
https://stackblitz.com/edit/angular-q9ppdt
- Angular 7.2
- RxJS 6.3
如果我的描述不清楚,请告诉我。
谢谢!
【问题讨论】:
-
能否在 stackblitz 或 JSfiddle 中重现问题?
标签: javascript angular rxjs