【问题标题】:angular.js getting var from inside functionangular.js 从函数内部获取 var
【发布时间】:2016-03-15 12:16:19
【问题描述】:

我正在使用在此函数中调用的服务从服务器获取数据:

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

我怎样才能做到这一点?

【问题讨论】:

  • 服务器函数是在 Angular 服务中调用还是在控制器中调用?
  • 我刚刚用服务器功能更新了我的问题

标签: javascript angularjs


【解决方案1】:

您在脚本开头声明变量,然后每当获取数据的函数返回时,它都会更新该变量的值。

$scope.results = [];

LeadsSrv.async().then(function (d) {
    $scope.results = d.data;
});

由于 Angular 的工作原理,您无需执行任何其他操作,它还会更新 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;
});

这应该完全符合您的要求,除非我误解了您的问题。

【讨论】:

  • 是的,您的解决方案有效,但正在从以前有效的服务器获取数据,但我的问题是我现在如何访问函数之外的范围 var 以使其在我的整个站点上可用?
  • @jhondano 你能指定“整个网站”吗?都是有角度的,还是混合的等等?
  • 网站都是有角度的!
  • 如果你只使用一个控制器,它应该可以通过 $scope.results inside angular 或者{{results}} in HTML 使用。
【解决方案2】:

我建议按照以下方式进行。

使您的控制器/指令(拥有 $scope 的人)依赖于LeadSrv 对象。如果它不是已经在工厂中包装的“角度”组件,则将其注入您的控制器中。

那你就干吧

LeadsSrv.async().then(function (d) {
    $scope.All_Leads = d.data;
});

【讨论】:

    【解决方案3】:

    目前,您正在做正确的事情,除了 一个 错误:您的调用正在异步执行。所以这基本上意味着,results 在您将其引用给$scope.All_Leads 时不会具有预期值,因为声明是同步发生的。

    要实现你想要的,你必须使用 Promise。看看this 和Angulars documentation

    【讨论】:

      【解决方案4】:

      要检查您的服务器是否报告错误,请添加 .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);
      });
      

      【讨论】:

        猜你喜欢
        • 2020-12-17
        • 1970-01-01
        • 2021-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多