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