javascript - AngularJS 输入字段未从 Controller 内的 setTimeout 更新

标签 javascript jquery html angularjs settimeout

我正在使用 AngularJS 支持的页面,我需要在只读输入文本字段中显示运行时钟(与 data-ng-model) 双向绑定(bind)。为了模拟运行时钟,我正在使用 JavaScript 调度程序setTimeout 每 1000 毫秒调用一个函数,它更新 $scope'd 属性值,该属性值又绑定(bind)到该输入文本字段。不知何故,输入字段中的值没有得到更新。所以我放置了一个 <pre />标记并使用 jQuery 选择器更新其内容。这工作正常,所以我需要帮助让输入文本字段值也每秒更新一次。

我已经设置了一个 jsFiddle对于这个例子。

HTML 如下:

<body data-ng-app="formApp">
    <div data-ng-controller="FormCtrl">
        Current Date and Time <input type="text" data-ng-model="formData.currentDateTime" readonly="readonly" size="60" />
    </div>
    <pre id="currentDateTime" style="font-size:1.5em;">
    </pre>
</body>

AngularJS 应用程序模块和 Controller 声明如下:

(function() {
    var formApp = angular.module("formApp", []);

    formApp.controller("FormCtrl", function ($scope) {
        $scope.formData = {};
        $scope.formData.currentDateTime = new Date().toString();

        (function updateCDT() {
            $scope.formData.currentDateTime = new Date().toString();
            document.getElementById("currentDateTime").innerHTML = $scope.formData.currentDateTime;
            setTimeout(updateCDT, 1000);
        })();
    });
})();

最佳答案

您需要使用 $scope.$apply() 或 angulars $timeout 来反射(reflect)更改,因为 setTimeout 超出了 angularjs 的范围

使用 $scope.$apply()

在 setTimeout(function(){},1000) 的匿名函数中应用 $scope.$apply() 然后像下面这样调用实际的函数

   (function updateCDT() {
        $scope.formData.currentDateTime = new Date().toString();
        document.getElementById("currentDateTime").innerHTML
  = $scope.formData.currentDateTime;
        setTimeout(function(){
          $scope.$apply();
            updateCDT()
        }, 1000);

fiddle对于 $scope.$apply()

使用 $timeout(不要忘记将其注入(inject) Controller )

 (function updateCDT() {
            $scope.formData.currentDateTime = new Date().toString();
            document.getElementById("currentDateTime").innerHTML
    = $scope.formData.currentDateTime;
            $timeout(updateCDT, 1000);
          
        })();

fiddle $超时

关于javascript - AngularJS 输入字段未从 Controller 内的 setTimeout 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719289/

相关文章:

javascript - 选择一个节点时如何获取dataValueField

javascript - 使用 Angularjs 发布从 UI 推送的数据数组

具有动画高度的jquery重叠图像

ios - 需要用我的临时配置文件重新签署 IPA 文件

javascript - jQuery 使用对象的方法作为事件处理程序

javascript - PeerJS/WebRTC 连接在快速 block 传输时失败

javascript - 如何检查 Node.js 脚本是否在终端或 Web 上运行?

javascript - 一次又一次显示警告框

javascript - 如何从标题到正文调用 JavaScript?

javascript - 使用行跨度在表格中垂直获取下一个表格单元格