Javascript 如何在Angular中向控制器获取ajax结果?
我有一个从ajax调用中获得价值的服务。我想将该值存储在一个变量中,并将该变量传递给控制器Javascript 如何在Angular中向控制器获取ajax结果?,javascript,angularjs,Javascript,Angularjs,我有一个从ajax调用中获得价值的服务。我想将该值存储在一个变量中,并将该变量传递给控制器 angular.module(“数据”,[]).service(“数据服务”,函数($http){ 返回{ 数据:函数(回调){ $http.get('http://www.w3schools.com/angular/customers.php)。成功(回拨); } } }) 角度。模块(“主”、“数据”)。服务(“主服务”,功能(数据服务){ var customerData={} 返回{ Getdat
angular.module(“数据”,[]).service(“数据服务”,函数($http){
返回{
数据:函数(回调){
$http.get('http://www.w3schools.com/angular/customers.php)。成功(回拨);
}
}
})
角度。模块(“主”、“数据”)。服务(“主服务”,功能(数据服务){
var customerData={}
返回{
Getdata:DataService.getCustomers(函数(结果){
customerData=结果;
console.log(customerData)
})
}
})
角度模块(“Home”).控制器(“HomeCntrl”,功能($scope,HomeService){
$scope.Result=HomeService.Getdata;
})
我希望数据存储在customerData
中,我必须将customerData
传递给控制器。请参见我的示例:
跟随至服务和控制器文件夹
小例子:
app.controller('MainCtrl', ['$scope', 'DataService', function($scope, DataService) {
DataService.getData().then(function (results) {
$scope.tasks = results;
});
}]);
app.factory('DataService', ['$http', '$q', function ($http, $q) {
var exports = {};
exports.getData = function () {
var deferred = $q.defer();
$http.get('/gettask')
.then(
function (result) {
deferred.resolve(result.data);
},
function (error) {
deferred.reject(error);
console.log('Getting is fail :' + error);
});
return deferred.promise;
};
return exports;
}]);
无延期:
app.factory('DataService', ['$http', function ($http) {
var exports = {};
exports.getData = function () {
return $http.get('/gettask')
.then(
function (result) {
return result.data;
},
function (error) {
console.log('Getting is fail :' + error);
});
};
return exports;
}]);
您不应该为此使用回调(尽管也有可能),这不是很方便。所有这些都适用于这种情况。所以你的代码应该是这样的:
angular.module("Data", []).service("DataService", function($http) {
return {
getCustomers: function() {
return $http.get('http://www.w3schools.com/angular/customers.php').then(function(response) {
return response.data;
});
}
}
});
angular.module("Home", ["Data"]).service("HomeService", function(DataService) {
return {
getData: function() {
return DataService.getCustomers().then(function(data) {
console.log('customers', data);
// maybe process data further and return new set
return data;
});
}
}
});
angular.module("Home").controller("HomeCntrl", function($scope, HomeService) {
HomeService.getData().then(function(data) {
$scope.Result = data;
});
});
演示:阅读关于延迟反模式的内容。也许吧。这是非常古老的代码,例如这段代码。如果你愿意,我们可以在function中返回$http,默认情况下$http返回promiss。确切地说,在这种情况下,$q是多余的。我的第一个服务是ajax->第二个服务BL->,然后从BL我应该在控制器中获取值答案中的代码已经使用了承诺,我不确定你要的是什么样的例子。我仍然没有得到Controlleries中的值,很抱歉我太草率了,错过了几个地方。检查更新的答案和演示。