目前我有一个工厂和一个控制器。工厂使用端点中的项目和数据页面进行更新。我的data
数组被识别正常,但我的pageCount
(int)更新从未实际更改过。我已经检查过以确保它实际上没有返回0。
.factory('myService', function($http) {
return {
data: [],
update: update,
pageCount: 0
};
function update() {
return $http.get('path/to/endpoint')
.then(function(res) {
angular.copy(res.data.itemsArray, this.data);
angular.copy(res.data.pageCount, this.pageCount);
// also tried this.pageCount = res.data.pageCount;
}.bind(this));
}
})
.controller('myCtrl', function(myService) {
myService.update();
$scope.data = myService.data;
$scope.pageCount = myService.pageCount;
});
<div>{{pageCount}}</div> // This does not update at all
<div ng-repeat="item in data">{{item}}</div> // This works fine
答案 0 :(得分:1)
您正在使用promise
函数返回update()
,以便您可以使用then
来处理结果(这会产生更一致的结果):
.factory('myService', function($http) {
return {
update: update
};
function update() {
return $http.get('path/to/endpoint')
.then(function(res) {
var result = {
data: [],
update: update,
pageCount: 0
};
result.data = res.data.itemsArray;
result.pageCount = res.data.pageCount;
return result;
});
}
})
.controller('myCtrl', function(myService) {
$scope.data = [];
myService.update().then(function(result) {
$scope.data = result.data;
$scope.pageCount = result.pageCount;
});
});
答案 1 :(得分:0)
从服务分配基元时,引用丢失。尝试从服务中的getter获取pageCount。尝试覆盖服务值与范围中的值完全不同。
它不会发生在数组中,因为它是一个引用,你使用了copy。
factory('myService', function($http) {
var pc = 0;
return {
data: [],
update: update,
pageCount: function() {
return pc;
}
};
function update() {
return $http.get('path/to/endpoint')
.then(function(res) {
angular.copy(res.data.itemsArray, this.data);
pc = res.data.pageCount;
}.bind(this));
}
})
.controller('myCtrl',
function(myService) {
myService.update();
$scope.data = myService.data;
$scope.pageCount = myService.pageCount;
});
<div>{{pageCount()}}</div> // This does not update at all
<div ng-repeat="item in data">{{item}}</div> // This works fine