问题描述
在我的角度应用程序中,我有一个包含一些字段的表格。在此表单上,我有两个字段,用于存储百分比值,并且这两个字段的总和应始终为100%。启用字段1,用户在其中键入一个值,并且在每个击键字段上都应更新两个字段。这是目标,但我无法实现。
这是两个字段:
<dxi-item datafield="fix" [label]="{text: 'Fix %'}" editorType="dxnumberBox"
[editorOptions]="{format: '#,##0.00\'%\'',onKeyDown: fixChanged,valueChangeEvent: 'keyup'}">
<dxi-validation-rule type="required" message="A mező kitöltése kötelező"></dxi-validation-rule>
</dxi-item>
<dxi-item datafield="variable" [label]="{text: 'Változó %'}">
<dx-number-Box disabled="true" [(value)]="varPercent" format="#,##0.00'%'"></dx-number-Box>
</dxi-item>
这是fixChanged
事件:
fixChanged = (e) => {
setTimeout(() => {
let fix = e.component.option('value');
this.fixPercentChanged.emit(100 - fix);
},100);
}
如您所见,在每次击键(击键)时,我都会计算varPercent
的值。我将其记录到控制台,它可以正常工作,所以这不是问题。在标记中,我使用双向绑定,但是numberBox的值不变。我该错吗?
ps:我使用devextreme组件,但是我认为,这个问题与此无关。我认为这是一个普遍的角度问题。
编辑:我尝试使用带有此标记的事件发射器:
但没有成功。
解决方法
最后,我在标记中创建了一个参考变量:
<dxi-item dataField="variable" [label]="{text: 'Változó %'}">
<dx-number-box #varNumberBox disabled="true" format="#,##0.00'%'"></dx-number-box>
</dxi-item>
然后在后面的代码中,设置varNumberBox
的值:
fixChanged = (e) => {
setTimeout(() => {
let fix = e.component.option('value');
this.varNumberBox.value = 100 - fix;
},100);
}
SO在激励回答自己的问题方面做得很好。