Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 鼠标结束时,输入字段将更新_Javascript_Jquery_Forms_Angular_Model Driven - Fatal编程技术网

Javascript 鼠标结束时,输入字段将更新

Javascript 鼠标结束时,输入字段将更新,javascript,jquery,forms,angular,model-driven,Javascript,Jquery,Forms,Angular,Model Driven,我制作了一个带有嵌套字段的角度2模型驱动表单。其中一个字段是数字字段,我正在使用jquery插件将数字格式化。我创建了一个指令,在添加新的输入行时初始化这个插件,但是当我添加新行时,总数必须除以所有行,这是一个数量。我在模型中的一个函数中进行了此划分,以更新formGroup中的字段 我的问题是,视图显示每行的新值,但是,插件正在格式化此字段,浏览器仅在我将鼠标光标放在上面时显示格式化的字段。看起来angular并没有像应该的那样更新视图 以下是一些关于正在发生的事情的图片: 首先,当图层出现时

我制作了一个带有嵌套字段的角度2模型驱动表单。其中一个字段是数字字段,我正在使用jquery插件将数字格式化。我创建了一个指令,在添加新的输入行时初始化这个插件,但是当我添加新行时,总数必须除以所有行,这是一个数量。我在模型中的一个函数中进行了此划分,以更新formGroup中的字段

我的问题是,视图显示每行的新值,但是,插件正在格式化此字段,浏览器仅在我将鼠标光标放在上面时显示格式化的字段。看起来angular并没有像应该的那样更新视图

以下是一些关于正在发生的事情的图片:

首先,当图层出现时,顶部的第一个字段没有显示格式化,但它是。

以下是将鼠标移到上方后的显示方式:

我添加了一些行,看看它们是如何显示的:

将鼠标移到上面后:


Ps:不要告诉我“你不应该用jquery来处理角度的废话……”。我知道这一点,但我需要使用它。

我的最佳猜测是,您所做的更改是在外部进行的,因此其更改检测引擎不知道这些更改。强制执行此操作的一个简单方法是使用setTimeout

setTimeout(() => {
  // Code that modify model values go here
})

“您不应该将jquery用于angular等等…”。问题是angular不会收到更改值的通知,也不会运行更改检测。如果触发了Angular应用程序侦听的事件,Angular将运行更改检测。当您将鼠标悬停在输入上时,似乎就是这种情况。您需要让jQuery知道需要运行更改检测。有不同的方法@GünterZöchbauer,我尝试在chrome控制台中使用document.createEvent()手动创建事件,但没有成功,即使使用mouseover或onmouseover事件。我需要知道我需要触发哪一个事件来检测这种变化。编辑:angular中用于强制进行更改检测的那些方法也不起作用。它需要是angular应用程序侦听的事件,如
(myEvent)=“false”
@HostListener('myEvent')handleMyEvent(){}
。事件需要在正在侦听的组件内部(在组件或其子代中)触发。我使用的jquery插件是autoNumeric。它有自己的方法来设置输入值并格式化。当angular更改模型中的值时,它会将新值反映到输入中,但autoNumeric没有检测到它,因此我添加了一个HostListener来侦听ngModelChange并调用autoNumeric方法来设置值。现在,输入中显示的值已格式化。谢谢你的帮助@GünterZöchbauer。