javascript - Angular 中的两种方式数据绑定(bind)未按我的预期工作

标签 javascript angularjs

在阅读了 Angular 文档后,我正在尝试测试一个简单的数据绑定(bind)概念。

这是示例 html 文件

<body ng-app>
  <h1>Hello, world!</h1>
  <div ng-controller="Ctrl">
    <input type="text" ng-model="count" />
    COUNT: <span ng-bind="count"></span>
  </div>
</body>

这就是Ctrl功能

var i = 0;
function Ctrl($scope) {
  $scope.count = i;
  inc();
}

function inc() {
  i++;
  setTimeout(inc, 1000);
}

我期望 html 中的 COUNT 会随着 var i 在 javascript 中每秒递增而不断更新。

但事实并非如此。

我试图找出我的代码出了什么问题,以及什么是演示双向数据绑定(bind)概念的好例子(意味着当 javascript 对象更改时,它应该反射(reflect)在 html 中)

最佳答案

两个问题:

  1. $scope.count = i; 不会是对全局 i 的引用,因此,无论下一个问题如何,都不会更新(此不是 Angular 问题)。

  2. 您的间隔函数会更新计数器,而 Angular 不会注意到它。要克服这个问题,请使用 $apply或特殊的 Angular 助手,例如$timeout

一个有效的例子是:

(function (app, ng) {
  'use strict';

  app.controller('Ctrl', ['$scope', '$timeout', function ($scope, $timeout) {
    $scope.count = 0;

    (function _update() {
      $scope.$apply(function () {
        $scope.count += 1;
      });

      $timeout(_update, 1000);
    }());
  }]);
}(angular.module('app', []), angular));

演示:http://jsbin.com/unasaf/1/

<小时/>

或者一个不太复杂的版本是:

function Ctrl($scope, $timeout) {
  $scope.count = 0;

  $scope.increment = function increment() {
    $scope.count += 1;
  };

  (function _update() {
    $scope.increment();    
    $timeout(_update, 1000);
  }());
}

关于javascript - Angular 中的两种方式数据绑定(bind)未按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819944/

相关文章:

php - BackboneJS 与普通 php 服务器

javascript - 使用井号/井号引用 javascript 实例方法

AngularJS:缩小破坏了我的指令

javascript - 如何在 $scope AngularJS 中声明对象

javascript - Angular 未检测到我的指令

javascript - 通过 AngularJS 使用 RESTful Web 服务

javascript - ReactJS Devtools 只显示 <TopLevel>

javascript - 如何同时检查 JSON 中响应及其子节点是否存在?

javascript - 在 JavaScript 中遍历对象键时使用 "hasOwnProperty()"有好处吗

asp.net - 包装 StaticFileMiddleware 以重定向 404 错误