【问题标题】:angular dot notation better explanation角点符号更好的解释
【发布时间】:2013-08-04 05:14:01
【问题描述】:

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

在此解决方案中(如下所示),它使用 javascript 对象来返回响应 (data.response),如果我尝试将 data 对象替换为 简单的 javascript 数组,它 不起作用,我想确切地知道为什么我需要使用 dot notation 以及为什么单个数组不起作用? (这将是很好的链接或示例解释)

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.data 将直接设置为数据data = r.datareturn {data: data};,我为什么要这样做需要依赖点符号吗?

【问题讨论】:

  • 我删除了这个点,它仍然有效plnkr.co/edit/lIltfOWL4YObm5oRB13W?p=preview
  • 但是您仍然可以通过data.response 访问响应槽,我的意思是:而不是var data = { response: {}, calls: 0 };var data = [];
  • 我尝试替换您的示例,但现在失败了 plnkr.co/edit/kCV95VJlCpSq6etVNJVf?p=preview
  • 因为每次调用poller时,data都指向一个新对象data = r.data;
  • 哦,我想我明白了。由于我使用的是相同的对象实例 (data.prop = value),每次唯一会改变的是值,如果我尝试使用 []{} 或简单的值,它会让我失去视图中的引用. (绑定:视图指向一个不再存在的对象)。我做对了吗?

标签: javascript angularjs syntax polling ajax-polling


【解决方案1】:

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

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 的数据绑定将被破坏,因为 d* 是具有不同原型的全新对象,因此无法追踪到 r.data。

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

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

【讨论】:

  • 非常感谢我不能投票给你(出于某种原因我不知道如何提高你的声誉)但我已经将你的答案标记为正确.
猜你喜欢
  • 1970-01-01
  • 2011-12-08
  • 2010-09-27
  • 2011-11-14
  • 1970-01-01
  • 2022-01-22
  • 2010-12-27
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多