Angularjs 无法从控制器(角度)中的工厂接收数据
为什么第二个Angularjs 无法从控制器(角度)中的工厂接收数据,angularjs,controller,factory,Angularjs,Controller,Factory,为什么第二个console.log在第一个打印实际数据时给我未定义的信息?如何将承诺中收到的数据分配给任何变量,以便能够在没有承诺的情况下使用它 angular.module('dopasujApp') .controller('productLoader', [ '$scope','getProducts', function ($scope,getProducts) { $scope.recived = {}; cons
console.log
在第一个打印实际数据时给我未定义的信息?如何将承诺中收到的数据分配给任何变量,以便能够在没有承诺的情况下使用它
angular.module('dopasujApp')
.controller('productLoader', [ '$scope','getProducts',
function ($scope,getProducts) {
$scope.recived = {};
console.log($scope.list);
function getter() {
return getProducts(1, 150, 20, 'ASC', 'PRODUCT_ID', 'a').then(function (recived) {
$scope.recived = recived;
console.log($scope.recived);
}
);
}
getter();
console.log($scope.recived);
}
]);
这是我的工厂代码:
angular.module('dopasujApp').factory('getProducts', ['$http', function ($http) {
return function(fit = 1, limit = 150, vendor = 20, sort = 'ASC', orderBy = 'PRODUCT_ID', search='a', size=[], filters={}, attribs=[]) {
var getProduct = {}, recived = {}, APIurl;
getProduct.data={};
getProduct.data.sort=sort;
getProduct.data.orderBy=orderBy;
getProduct.data.search=search;
getProduct.data.filters=filters;
getProduct.data.filters.ATTRIBS=attribs;
getProduct.data.filters.SIZE=size;
recived.list= [];
recived.count = 0;
recived.filters = {};
APIurl = "*******?action=getListing&fit="+fit+"&limit="+limit+"&vendor="+vendor;
var request = $http({
method: "POST",
url: APIurl,
headers: {
'Content-Type': 'application/json'
},
data: {
data: getProduct.data
}
});
var values = request.then(function (response){
return {
list: response.data.QUERY,
count: response.data.COUNT,
filters: response.data.FILTERS
};
});
return values;
}
}]);
因为您的getProducts是一个承诺,即使是很难,您的第二个console.log也是在您的getter()之后;,console.log是在您的承诺得到解决之前执行的,这就是它未定义的原因。因为您的getProducts是一个承诺,甚至您的第二个console.log也是在您的getter()之后执行的;,console.log是在您的承诺得到解决之前执行的,这就是它未定义的原因。您可以共享您的服务代码吗?当然,我会编辑问题。您可以共享您的服务代码吗?当然,我会编辑问题。若要添加此项<代码>getter()。然后(function(){console.log($scope.recived);})将是进行第二次logOk的正确方法,但是如何获取实际数据呢?我的意思是,如何将实际接收的数据分配给
$scope.received
或任何其他变量,以便能够在没有承诺的情况下使用它?您已经在分配它了,不是吗?使用$scope.recived=recived;在承诺内?是的,承诺等待数据,console.log立即运行。你需要等待获得者。。。ie@charlietfl getter().then()是一个不错的选择。所以它打印未定义不是因为我做错了,而是因为我试图打印它时它还没有完成?呃,现在我明白了。。。所以实际上在工厂里使用promise并没有给我什么,对吗?除了这个<代码>getter()。然后(function(){console.log($scope.recived);})将是进行第二次logOk的正确方法,但是如何获取实际数据呢?我的意思是,如何将实际接收的数据分配给$scope.received
或任何其他变量,以便能够在没有承诺的情况下使用它?您已经在分配它了,不是吗?使用$scope.recived=recived;在承诺内?是的,承诺等待数据,console.log立即运行。你需要等待获得者。。。ie@charlietfl getter().then()是一个不错的选择。所以它打印未定义不是因为我做错了,而是因为我试图打印它时它还没有完成?呃,现在我明白了。。。所以实际上在工厂里使用承诺对我来说什么都没有,对吗?