嵌套的Chaning承诺响应通过使用UI路由解析在Controller中未定义

时间:2016-06-14 19:28:40

标签: angularjs angularjs-directive angular-ui-router

过去3天,我一直在努力通过控制器从嵌套服务中获取值,

我有一个服务1调用并将服务1调用传递给服务2并获得响应并传递给控制器​​,在控制器中,我得到了未定义。

因此,当我传递单个响应调用时,这意味着service1调用,通过使用Ui路由解析在控制器中获取值。

这里有什么问题?

这是我的工厂电话。

app.factory('LogHomService', function (Service1, Service2)
{
    var MyService = function (data)
    {

   Service1.log("user", encodeURIComponent("ad"))
        .then(function(response) {
          var FullUrl = response.strURL;
          var objs = response.products; // getting the response here

         Service2.pageLoad(objs)
            .then(function(response) {
               var homeScreen = response; // getting the response here 
               return homeScreen;

                        });
                     });

        };

    return {

            MyService:  MyService
        }
});

路线呼叫:

.state('home.prod', {
  url: '/product',
  views: {
    '@': {
      templateUrl: baseUrl + 'home/product',
      controller: 'productController'
    }
  },
  resolve: {
    param2: function(LogHomService) {
      return LogHomService.MyService();
    }
  }
})

控制器:

var productController = function ($scope, $rootScope, $state, $stateParams,param2)
{
       console.log(param2); // getting undefined
}
productController.$inject = ['$scope', '$rootScope', '$state','$stateParams','param2');

注意: 当我返回单个响应时,在控制器中获取一个值,这意味着返回服务1调用获得响应。

当我尝试返回未定义的service2调用时。

这是我的工厂电话。

app.factory('LogHomService', function (Service1, Service2)
{
    var MyService = function (data)
    {

   Service1.log("user", encodeURIComponent("ad"))
        .then(function(response) {
          var FullUrl = response.strURL;
          var objs = response.products; // getting the response here

        return objs;
            });
        };

    return {

            MyService:  MyService
        }
});

3 个答案:

答案 0 :(得分:0)

在评论中回答您的问题,为了访问控制器中服务中的数据,您可以执行以下操作:

app.factory('LogHomService', function (Service1, Service2) {
   var service = {}
   service.myMethod = function (data) {
     Service1.log("user", encodeURIComponent("ad"))
        .then(function(response) {
          var FullUrl = response.strURL;
          //at this point, you will have access to LogHomService.objs
          service.objs = response.products; 
          return service.objs;
         });
      };

    return service
});

答案 1 :(得分:0)

这一行:

return LogHomService.MyService();

将始终返回null,因为MyService函数不返回任何内容。

这是一个有针对性的解决方案:

var MyService = function (){
 return Service1.log("user", encodeURIComponent("ad"))
    .then(function(response) {
      var FullUrl = response.strURL;
      var objs = response.products;
      return Service2.pageLoad(objs);
    };
}

我也清除了一些不必要的东西。

答案 2 :(得分:0)

来自控制器的Service2对象响应,在我使用返回LogHomService.MyService时控制器获取函数调用;如果我使用return LogHomService.MyService();显示未定义。我将附上下面的截图。

但是在服务响应中有价值,不知道为什么。enter image description here

当我点击数据时,它会显示工厂代码。