Angularjs $http请求不起作用后更新数组
在md侧导航中重复ngAngularjs $http请求不起作用后更新数组,angularjs,http,scope,Angularjs,Http,Scope,在md侧导航中重复ng <md-list> <md-list-item ng-repeat="it in cars"> {{ it.name }} </md-list-item> </mdlist> 上面的代码在加载控制器(最后一行)并且工作正常时运行。但当我创建新车(汽车存储在mysql数据库中)时,我想通过self.refreshUI()函数更新$scope.cars数组,它在手动刷
<md-list>
<md-list-item ng-repeat="it in cars">
{{ it.name }}
</md-list-item>
</mdlist>
上面的代码在加载控制器(最后一行)并且工作正常时运行。但当我创建新车(汽车存储在mysql数据库中)时,我想通过self.refreshUI()函数更新$scope.cars数组,它在手动刷新页面之前不会工作
console.log($scope.cars)
from refreshUI函数返回正确的结果,但是console.log(angular.element($0.scope().cars)
给出了错误的数组(没有新车)
汽车服务
function carService($q, $http) {
var cars = this;
cars.carsList = {};
cars.getAllCars = function() {
var defer = $q.defer();
$http.get("http://car.app/getCars")
.success(function(res) {
cars.carsList = res;
defer.resolve(res);
})
.error(function(err, status){
defer.reject(err);
});
return defer.promise;
};
return cars;
}
问题出在哪里
//edit:$rootScope工作正常,但我仍然想使用$scope,为什么不使用
$http
调用返回的承诺?除了更好的代码风格之外,它还可以解决您的问题。使用这种服务控制器基础设施,我从未遇到过这样的“绑定问题”
function carService($q, $http) {
var cars = this;
cars.carsList = {};
cars.getAllCars = function() {
return $http.get('http://car.app/getCars').then(function (response) {
cars.carsList = response.data;
return response.data;
});
};
return cars;
}
在控制器中,您可以执行以下操作:
self.refreshUI = function() {
carService.getAllCars()
.then(function (data) {
// just obtain the promise data
$scope.cars = data;
}, function (err) {
// error handling
});
};
self.refreshUI();
为什么不使用
$http
调用返回的承诺?除了更好的代码风格之外,它还可以解决您的问题。使用这种服务控制器基础设施,我从未遇到过这样的“绑定问题”
function carService($q, $http) {
var cars = this;
cars.carsList = {};
cars.getAllCars = function() {
return $http.get('http://car.app/getCars').then(function (response) {
cars.carsList = response.data;
return response.data;
});
};
return cars;
}
在控制器中,您可以执行以下操作:
self.refreshUI = function() {
carService.getAllCars()
.then(function (data) {
// just obtain the promise data
$scope.cars = data;
}, function (err) {
// error handling
});
};
self.refreshUI();
您是否100%确定cars作用域位于正确的ng控制器中?我非常确定应该触发一个摘要循环。resolve调用,但只是为了确保,如果在设置$scope.cars变量后插入“$scope.$apply()”,它是否正确更新?我不是说这是正确的解决方案,而是一个调试建议。只有一个控制器和$scope。$apply()给我错误“$digest ready in progress”。您确定要调用
refreshUI
函数吗?如果是这样的话,carService.carsList
是否有新的carsI刚刚尝试了$rootScope及其工作原理。我不知道为什么$scope不是…您是否100%确定cars范围在正确的ng控制器中?我相当确定应该启动一个摘要循环。resolve调用,但只是为了确保,如果您在设置$scope.cars变量后插入一个“$scope.apply()”,它是否会正确更新?我不是说这是正确的解决方案,而是一个调试建议。只有一个控制器和$scope。$apply()给我错误“$digest ready in progress”。您确定要调用refreshUI
函数吗?如果是这样的话,carService.carsList
是否有新的carsI刚刚尝试了$rootScope及其工作原理。我不知道为什么$scope不是…我试过这样做,即使没有服务,仍然有问题。你能定义这些问题吗?您的浏览器控制台是否提供了一些输出?您是否尝试将$http调用的结果记录到控制台中?当它在控制台中得到结果时,尝试从控制器中的服务调用中记录相同的结果。还要记录错误函数,以检查它们是否将被执行,以确定HTTP请求是否不正常。我以这种方式进行了尝试,即使没有服务,仍然存在问题。您能定义这些问题吗?您的浏览器控制台是否提供了一些输出?您是否尝试将$http调用的结果记录到控制台中?当它在控制台中得到结果时,尝试从控制器中的服务调用中记录相同的结果。还要记录错误函数,以检查它们是否将被执行,以确定HTTP请求是否不正常。