【问题标题】:Input using ng-model not binding when textbox is populated via javascript通过javascript填充文本框时使用ng-model输入不绑定
【发布时间】:2015-01-01 22:56:56
【问题描述】:

我有一个使用 javascript 填充的文本框,该文本框通过读取 QR 码并设置值来获取数据。我正在使用 ng-model 绑定到我的控制器中的一个变量,当我在文本框中手动键入时它工作正常,而不是在它填充了 javascript 时。我猜有一些事件我必须手动触发才能触发 ng-model 来发挥它的魔力,但我不知道那个事件是什么,或者它是否是正确的方法。 我的输入看起来像:

<input type="text" id="read" name="itemId" class="form-control center-block" placeholder="Item Id" ng-model="scannedId"/>

一旦读取 javascript 的 QR 码完成并工作,我将使用以下值设置值:

$('#read').val(data);

我尝试了以下方法来尝试手动触发一个我希望 ng-model 在分配 val(data) 后立即监听的事件,但都失败了:

$('#read').trigger('input');
and
angular.element($('#reader')).triggerHandler('onChange');

如果我手动输入它,一切都会正常工作,而不是在使用 javascript 更新时。提前致谢!

【问题讨论】:

    标签: javascript jquery angularjs angular-ngmodel


    【解决方案1】:

    在控制器内部设置模型值。不要使用 jQuery。

    在控制器内部,创建一个对象: $scope.myModel = {};

    然后更改您的ng-model="myModel.scannedId"

    然后在你的控制器里面,你可以设置模型$scope.myModel.scannedId = data,它会自动绑定。

    教训...不要尝试使用 jQuery 显式设置“值”,特别是如果您有 ngModel 指令。 Angular 会以某种方式覆盖它,即使您可以看到 'value' 属性已更改。

    【讨论】:

    • 读取二维码所涉及的代码是第三方库,我在其中传入一个函数来设置由($('#read').val(data);)定义的值。因此,除非我能以某种方式将控制器方法传递给第 3 方 js,否则我将无法在控制器中设置值。我希望我可以在输入上触发一些会触发 ng-model 绑定的事件。
    • 我使用了这个github.com/dwa012/html5-qrcode 并对其进行了一些修改。它是github.com/LazarSoft/jsqrcode 的包装器,可按时间间隔流式传输视频。
    • 什么触发调用二维码阅读器?是在文件上传吗?你是在调用之前将&lt;img&gt; 标记插入&lt;div&gt; 吗?
    • 它以一定间隔对摄像机进行采样,并像在 html5-qrcode 项目的示例中一样传递该 img。输入被填充得很好我认为它只是通过输入输入触发的一些事件。我正在更新问题以显示我手动触发事件的失败尝试。
    • 看看这个 plunkr:plnkr.co/edit/6bayLaFqZv58CqKKklbF?p=preview 基本上,我创建了一个带有“回调”参数的指令。第 3 方插件在 qrcode 指令上初始化,并将任何数据发送到控制器内的“回调”函数。然后模型被更新。
    【解决方案2】:

    当您在 AngularJS 环境之外时,您需要手动触发 DigestCycle...所以,尝试这样的事情:

    var scope = $('#read').scope(); scope.apply(function() {scope.scannedId = 'new value outside AngularJS LifeCycle'; });
    

    【讨论】:

    • 你能为我创建一个 plunker 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2017-08-04
    • 2021-01-19
    相关资源
    最近更新 更多