Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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
Javascript 无法从服务到作用域的$http获取数据_Javascript_Angularjs - Fatal编程技术网

Javascript 无法从服务到作用域的$http获取数据

Javascript 无法从服务到作用域的$http获取数据,javascript,angularjs,Javascript,Angularjs,我们正试图通过$http从服务中获取数据,但当我将数据接收到控制器时,我无法在该函数之外访问它 $scope.resource返回函数内部的数据,但不返回函数外部的数据,请提供帮助 var app = angular.module('app', ['ui.router','ngTasty']); app.config(['$urlRouterProvider', '$stateProvider',function($urlRouterProvider, $stateProvider, $rout

我们正试图通过$http从服务中获取数据,但当我将数据接收到控制器时,我无法在该函数之外访问它

$scope.resource返回函数内部的数据,但不返回函数外部的数据,请提供帮助

var app = angular.module('app', ['ui.router','ngTasty']);
app.config(['$urlRouterProvider', '$stateProvider',function($urlRouterProvider, $stateProvider, $routeProvider, $locationProvider) {
    $urlRouterProvider.otherwise('/');
    $stateProvider
        .state('home', {
            url: '/',
            templateUrl: 'templates/home.html',
            controller: function($scope, $http, $location, agrService) {
                agrService.bannerSlides().then(function(data) {
                    //its working here                       
                   $scope.resource = data;
                }, function(error) {
                    // do something else
                });
我需要在这里存取数据有人能帮忙吗

               console.log($scope.resource);
            }
        });
}]);
app.service('agrService', function($q, $http) {this.bannerSlides = function() {
        var dataUrl = 'http://WWW.EXP.COM/codeIgniter_ver/main/home';
        var ret = $q.defer();
        $http({
                method: 'GET',
                dataType: "json",
                url: dataUrl
            })
            .success(function(data, status, headers, config) {
                ret.resolve(data);
            }).error(function(data, status, headers, config) {
                ret.reject("Niente, Nada, Caput");
            });
        return ret.promise;
    };
});

我的建议是重新思考一下逻辑。您希望在收到数据后对其进行处理,那么为什么不在收到数据后创建一个调用的函数呢?

您将永远无法访问该控制台日志中的资源数据,因为$http是一个异步调用,无论您是否返回一个承诺,它在那一点上都没有准备好

但是,如果您在模板中或其他使用angular的双重绑定的地方使用它,它将很好地工作

要解决您的问题,您可以使用服务调用后发生的情况定义一个函数,只需从成功回调调用它:

agrService.bannerSlides().then(function(data) {
                //its working here                       
               $scope.resource = data;
               myAfterFunction();   // <--- here
            }, function(error) {
                // do something else
            });
顺便说一句,您的服务就是一个例子,您可以简单地执行以下操作:

app.service('agrService', function($q, $http) {this.bannerSlides = function() {
        var dataUrl = 'http://WWW.EXP.COM/codeIgniter_ver/main/home';
        return $http({
                method: 'GET',
                dataType: "json",
                url: dataUrl
            })
    };
});
app.service('agrService', function($q, $http) {this.bannerSlides = function() {
        var dataUrl = 'http://WWW.EXP.COM/codeIgniter_ver/main/home';
        return $http({
                method: 'GET',
                dataType: "json",
                url: dataUrl
            })
    };
});