承诺在Angular中解析后重新发出请求

时间:2015-01-24 02:20:40

标签: javascript angularjs promise

我觉得我在这里缺少一些简单的东西。我的目标是能够从服务访问数据(从端点获取数据),但稍后可以通过重新ping端点来更新存储的数据。

.service('myService', function($http) {
    var self = this;    

    this.myData = {};

    this.getItem = function() {
        return $http.get('/path/to/endpoint')
            .then(function(res) {
                self.myData = res.data;  // data looks like: { x: 1, y: 2}
            }); 
    };
})

.controller('mainCtrl', function($scope, myService) {
    myService.getItem();
    $scope.data = myService.myData;

    window.logService = function() {
        console.log(myService);  // { getItem: function(){...}, data: {x: 1, y: 2} }
    };
});

<div ng-controller="mainCtrl">{{data.x}}</div> <!-- Does not update with the data returned from the promise -->

这似乎毫无意义。如果我在承诺返回后点击window.logService(),我清楚地看到数据在正确的位置,但我的视图不会更新。

1 个答案:

答案 0 :(得分:1)

Angular正在观看{}引用,即使您重新分配该值也是如此。

尝试在回调中使用angular.copy(),以便更新观看对象并正确更新视图。

.then(function(res) {
    angular.copy( res.data, self.myData);
});