angular.js从函数内部获取var

时间:2016-03-15 12:16:19

标签: javascript angularjs

我从服务器获取数据,并在此函数中调用该服务:

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;
});

我怎样才能实现这个目标?

4 个答案:

答案 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);
});