Let's say if we change the factory in this way:
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;
});
In the controller, the statement $scope.data = Poller;
assign d object to $scope.data, so the object relationship is like this after the initialization
$scope.data -> d -> r.data
When poller() is called again in 1 sec, d is replaced with an new object, so the object relationship will be
$scope.data -> d* -> r.data (d* is a new object)
so the angularjs's data binding will be broken since there is no way to trace to the r.data since d* is a brand new object with different prototype.
With dot notation, after the initialization the object relationship never changes since the periodic calls to poll() doesn't create new object d
but it just keeping updating the response field with new r.data
object.
$scope.data -> d.response -> r.data