angular.module('App').factory('API', ['someAPI', function(someAPI){
var service = {};
service.loadInfo= loadInfo;
return service;
function loadInfo(id) {
var list = [];
var items= [];
someAPI.list.get({id: id}).$promise.then(function (result) {
items= result;
if (items.length === 0) {
items= 'No results';
} else {
for (var i=0; i<items.length; i++) {
list.push(items[i].name);
}
}
console.log('List:' + list); **//This print out 'List: a, b, c, d' in console**
})
console.log('List:' + list); **//This print out nothing**
return list;
}
}
]);
//Controller
angular.module('App').controller('ProductCtrl', function($scope, API) {
$scope.loadInfo = function (id) {
$scope.list = API.loadInfo(id);
console.log($scope.list); // This print out undefined
}
}
这可能是一个愚蠢的问题,在我的服务中,变量内部有些问题&#39;函数可以访问,但控制器得到一个未定义。欣赏是否有任何机构可以解释我。谢谢!
答案 0 :(得分:0)
@James在您的控制器中,您需要将$ scope传递给您的函数(这称为依赖注入),简单来说就是将对象传递给函数。希望它有所帮助!
答案 1 :(得分:0)
在someAPI.list.get({id:id})之前立即返回列表。$ promise已解决。你需要以承诺的方式做到这一点。另一个问题是您的本地变量名为列表,但您返回列表。
我建议你在服务中做一下
return someAPI.list.get({id: id}).$promise.then(function (result) {
items= result;
if (items.length === 0) {
items= 'No results';
} else {
for (var i=0; i<items.length; i++) {
list.push(items[i].name);
}
}
return list;
})
}
并将move.then部分放到你的控制器上。
$scope.loadInfo = function (id) {
someAPI.loadInfo(id).then(function (result) {
$scope.list = result;
});
}
答案 2 :(得分:0)
修改了依赖项并重写了工厂调用。
//Controller
angular.module('App').controller('ProductCtrl', function(API,$scope) {
$scope.loadInfo = function (id) {
API.loadInfo(id)
.success(function (data, status, headers, config) {
$scope.list = data;
console.log($scope.list);
}).error(function (e, status, headers, config) {
//log error here
});
}
答案 3 :(得分:0)
试试这个,它会在ajax完成它的过程时更新你。
$scope.$watch('list',function(val){
console.log(val);
});