承诺在 Angular 内解决后重新提出请求
Remake request after promise resolves in Angular
我觉得我在这里遗漏了一些简单的东西。我的目标是能够从服务(从端点获取数据)访问数据,但稍后能够通过重新 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 -->
这似乎没有意义。如果我在 promise returns 之后点击 window.logService()
,我会清楚地看到正确位置的数据,但我的视图不会更新。
即使在您重新分配值后,Angular 仍在监视 {}
引用。
尝试在回调中使用 angular.copy()
,以便更新监视对象并正确更新您的视图。
.then(function(res) {
angular.copy( res.data, self.myData);
});
我觉得我在这里遗漏了一些简单的东西。我的目标是能够从服务(从端点获取数据)访问数据,但稍后能够通过重新 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 -->
这似乎没有意义。如果我在 promise returns 之后点击 window.logService()
,我会清楚地看到正确位置的数据,但我的视图不会更新。
Angular 仍在监视 {}
引用。
尝试在回调中使用 angular.copy()
,以便更新监视对象并正确更新您的视图。
.then(function(res) {
angular.copy( res.data, self.myData);
});