ng-model 无法将输入的值绑定到触摸事件

ng-model fails to bind the values entered with a touch event

我正在使用 JQuery + Bootstrap 键盘,该键盘专为我的 Angular 应用程序中的触摸输入而配置(如果我使用鼠标点击按键,键盘将在不输入任何内容的情况下关闭。它被写为在点击事件时关闭)。

Mobile-first-Virtual-Keyboard-Plugin-With-jQuery-Bootstrap

我的问题是当我使用 ng-model 向输入框输入内容时绑定到我的控制器,如下面的代码,

<input autocomplete="false" class="textInputSeeThrough keyboard"
                    ng-model="patientNIC" type="text" id="nic"
                    name="patientNICTxtbox" autofocus
                    placeholder="--- ENTER NIC NUMBER ---">

它没有正确绑定。但是如果我使用普通 javascript 遍历 DOM 并在我的控制器中获取元素值而不是使用 $scope 获取值,我可以正确获取该值。

var val1 = $scope.patientNIC; // this doesn't work
var val2 = document.getElementById("nic"); // this works

alert(val1);
alert(val2.value);

所以这显然不是键盘的问题。 angular js 在处理触摸事件时是否存在任何已知问题?我找不到任何。有人可以向我解释为什么会这样吗?在此先感谢。

简单的回答是:Angular不知道输入的变化。每个更改都必须包含在 $apply$timeout 中。

看看这个 Update Angular model after setting input value with jQuery

不用担心,使用 jquery / Javascript 为输入元素设置值。 请将以下脚本粘贴到您的 html 块/js (jquery)

    !function (n, t) { "use strict"; var r = n.fn.val; n.fn.val = function (n) { if (!arguments.length) return r.call(this); var e = r.call(this, n); return t.element(this[0]).triggerHandler("input"), e } }(window.jQuery, window.angular);

甚至我们不需要重新分配值给 ng 对象/单独触发输入。

干杯!