角点符号更好的解释

时间:2013-08-04 05:14:02

标签: javascript angularjs syntax polling ajax-polling

我正在寻找关于polling data using AngularJS的解决方案,我在stackoverflow找到了这个。

在此解决方案(如下图所示)中,使用javascript对象返回响应(data.response),如果我尝试将<{1}}对象替换为简单的javascript数组不起作用,我想知道为什么我需要使用点符号以及为什么单个数组不起作用? (这将是很好的链接或解释与例子)

data

尝试总结我的目标(我想要真正了解的内容):app.factory('Poller', function($http, $timeout) { var data = { response: {}, calls: 0 }; var poller = function() { $http.get('data.json').then(function(r) { data.response = r.data; data.calls++; $timeout(poller, 1000); }); }; poller(); return { data: data }; }); 可以是var data = { response: {}, calls: 0 };,然后var data = {};会直接设置为数据response.datadata = r.data,为什么我需要依赖点符号?

1 个答案:

答案 0 :(得分:7)

假设我们以这种方式改变工厂:

app.factory('Poller', function($http, $timeout) {
  var d = {};
  var poller = function() {
    $http.get('data.json').then(function(r) {
      d = r.data;
      $timeout(poller, 1000);
    });
  };
  poller();

  return d;
});

在控制器中,语句$scope.data = Poller;将d对象分配给$ scope.data,因此初始化后对象关系如下所示

$scope.data -> d -> r.data

当在1秒内再次调用poller()时,d被替换为新对象,因此对象关系将是

$scope.data -> d* -> r.data (d* is a new object)

所以angularjs的数据绑定将被打破,因为无法跟踪r.data,因为d *是一个具有不同原型的全新对象。

使用点表示法,在初始化之后,对象关系永远不会改变,因为对poll()的定期调用不会创建新对象d,而只是使用新的r.data对象更新响应字段

$scope.data -> d.response -> r.data