Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $http请求不起作用后更新数组_Angularjs_Http_Scope - Fatal编程技术网

Angularjs $http请求不起作用后更新数组

Angularjs $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侧导航中重复ng

<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请求是否不正常。