我从服务器获取数据,并在此函数中调用该服务:
LeadsSrv.async().then(function (d) {
results = d.data;
});
我想访问此函数之外的结果,然后将其分配给范围,如下所示:
$scope.All_Leads = results;
这是服务器功能:
LeadApp.service('LeadsSrv', function ($http) {
var all = {
async: function() {
var promise = $http({
url: '../app/Data.php',
method: "POST",
params: { req_id: 'leads_list', user_id: 1 }
}).then(function (response) {
return response;
});
return promise;
}
};
return all;
});
我怎样才能实现这个目标?
答案 0 :(得分:3)
在脚本开头声明变量,然后每当获取数据的函数返回时,它都会更新该变量的值。
$scope.results = [];
LeadsSrv.async().then(function (d) {
$scope.results = d.data;
});
由于角度的工作方式,您不需要做任何其他事情,它也会更新UI元素和绑定。
<强>更新强>
我这样做:
服务:
LeadApp.service('LeadsSrv', function ($http) {
var service = {
postData: postData
};
return service;
function postData(data) {
return $http.post('../app/Data.php', data);
}
在控制器中:
//Initialize the variable
$scope.results = [];
var data = {
req_id: 'leads_list',
user_id: 1
};
LeadsSrv.postData(data).then(function (response) {
//Once the $http.post succeeds, it will update your variable
$scope.results = response.data;
});
这应该完全符合您的要求,除非我误解了您的问题。
答案 1 :(得分:0)
我建议在下面的时候讨论这个问题。
使您的控制器/指令(拥有$ scope的人)依赖于LeadSrv
对象。如果它不是&#34; angular&#34;组件已将其包装在工厂中,然后将其注入控制器中。
然后你就完成了
LeadsSrv.async().then(function (d) {
$scope.All_Leads = d.data;
});
答案 2 :(得分:0)
目前,除了一个错误之外,你做的是正确的事:你的电话是异步执行的。所以这基本上意味着,results
在您将其引用到$scope.All_Leads
时将没有预期值,因为声明是同步发生的。
要实现您想要的目标,您必须使用承诺。看看this和Angulars documentation。
答案 3 :(得分:0)
要检查您的服务器是否报告错误,请添加.catch
方法。
LeadsSrv.async().then(function onFulfilled(r) {
console.log("DATA: ", r.data);
$scope.results = r.data;
}).catch( function onRejected(response) {
console.log("ERROR: ", response.status);
});