Javascript 无法从服务到作用域的$http获取数据
我们正试图通过$http从服务中获取数据,但当我将数据接收到控制器时,我无法在该函数之外访问它 $scope.resource返回函数内部的数据,但不返回函数外部的数据,请提供帮助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
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
})
};
});