【问题标题】:undefined service response in controller to store in variable using angular?控制器中未定义的服务响应使用角度存储在变量中?
【发布时间】:2016-05-28 09:09:10
【问题描述】:

我有一个工厂,调用服务并获取响应并传递给控制器​​并尝试将响应存储在一个未定义的变量中

app.factory('Myservice', function (service1, service2) {
    return {
        getService: function (data) {
            service1("user", encodeURIComponent("pass")).then(function (response) {

                varSessionData = response.Obj;

                var queryString = strURL[1].split("&");

                Service2.pageLoad(SessionData).then(function (response) {
                    var homeScreen = response;

                    data(homeScreen);
                });
            });
        }
    };
});

在控制器中:

var Mydata = MyService.geService(function (data) {
    Console.log(data);
    return data; // getting response
});

$scope.Hello = Mydata; // undefined

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-scope


    【解决方案1】:

    每当您发出任何 AJAX 请求时,它们都是异步的。这就是使用 Angular 承诺的原因(.then 方法)。所以你应该在你的控制器中改变你的代码:

    MyService.geService(function (data) {
        Console.log(data);
        $scope.Hello = data;
    });
    

    【讨论】:

      【解决方案2】:

      将其更改为以下内容,您的数据不是同步定义的。

      控制器:

      MyService.geService(function(data) {
        $scope.Hello = data;
      });
      

      【讨论】:

      • 我已经在另一个服务控制器中传递了 $scope.Hello,这意味着取决于获取结果 Service3.pageLoad($scope.Hello) .then(function (response) { $scope.ServiceModelobj = 响应;console.log(响应);}
      【解决方案3】:

      我已经在另一个服务控制器中传递了 $scope.Hello,这意味着依赖于从服务中获取结果。

      不工作?

      var HomeController = function ($scope, $rootScope, $http, $stateParams, $state, Service3, Myservice)
      {
      
      MyService.geService(function (data) {
          Console.log(data);
          $scope.Hello = data;
      });
      
      Not working
        Service3.pageLoad($scope.Hello) // not get the value
             .then(function (response) {
      
                 $scope.ServiceModelobj = response;
                 console.log(response);
      }
      

      工作代码

      var HomeController = function ($scope, $rootScope, $http, $stateParams, $state, Service3, Myservice)
      {
      
      MyService.geService(function (data) {
          Console.log(data);
          $scope.Hello = data;
      
       Working//
        Service3.pageLoad($scope.Hello) // get the value
             .then(function (response) {
      
                 $scope.ServiceModelobj = response;
                 console.log(response);
      
      });
      }
      }
      

      【讨论】:

      • 在您的第一个示例中,第一个服务方法运行,然后第二个服务方法在第一个调用解决之前立即运行。在您的第二个示例中,您在第一个回调中调用第二个服务,因此此时它已被定义。
      • 在第二个示例中,我在第一个服务中使用了第二个服务,这就是它的返回值,但我的问题是有没有其他方法可以全局传递第一个服务响应,这是我不想要的将第二个服务放在第一个服务中。请参阅未定义中的第一个示例,我需要获取解决我问题的值。
      猜你喜欢
      • 1970-01-01
      • 2017-02-17
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多