我们正在尝试从服务agrService
获取数据$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;
};
});
答案 0 :(得分:0)
我的建议是重新考虑一下逻辑。您希望在收到数据后对数据执行某些操作,那么为什么不在收到数据后创建一个函数?
答案 1 :(得分:0)
您永远无法访问该控制台日志中的资源数据,因为$ http是异步调用,无论您是否返回承诺,它都没有准备好那一点。
但是,如果您在模板或使用角度双重绑定的其他地方使用它,它将正常工作。
要解决您的问题,您可以使用该服务调用之后的内容定义一个函数,并从成功回调中调用它:
agrService.bannerSlides().then(function(data) {
//its working here
$scope.resource = data;
myAfterFunction(); // <--- here
}, function(error) {
// do something else
});
,功能可以是:
function myAfterFunction() {
console.log($scope.resource);
}
顺便说一下。您的服务是deferred antipattern的一个示例,您可以这样做:
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
})
};
});