更改ngModel只触发writeValue一次



我有一个自定义组件,它可以获得与ngModel绑定的对象。

在组件内部,我读取对象的数值,并将其显示在primeng number input中。

问题是primeng number input(ngModelChange)事件仅在输入失去焦点时触发。

在我们的应用程序中,这是一个问题,因为我们通常使用keyup.enter来跳转到不同的输入。当使用keyup.enter时,输入没有失去焦点,因此ngModel没有改变。

我已经为该组件构建了一个方法,使输入首先失去焦点。这对于更改ngModel非常有效。然后,我们将ngModel设置为null以清除输入,但这仅在第一次起作用。

第二次时,该值仅停留在输入中。

我在这个Stacklitz 中重现了这个问题

你能给一个值为0而不是null的新对象赋值吗?

changeValue() {
console.log(this.value)
this.value = {value: 0};
}

这肯定会使ngModel检测到更改并触发组件内部的writeValue((方法。我认为问题是分配2倍的null值,它没有检测到任何差异。

在priming中,您有事件(onInput(,请参阅文档;事件";。所以你可以做

<p-inputNumber ....(onInput)="change($event)"></p-inputNumber>
change(event)
{
//see that event is an object with two properties:
//originalEvent: Browser event
//value: new Value
this._onChange({value: event.value})
}

更新如果在版本9中您没有事件输入,您可以尝试-我不检查-使用事件键向上传递自己的p号。为此,使用模板参考变量

<p-inputNumber #myinput (keyup)="change(myinput)" ... >
change(pInput)
{
console.log(pInput.input.nativeElement.value)
}