尝试从工厂获取数据并将其传递到控制器,然后用于ng-repeat。不知道为什么,但控制器永远不会运行工厂中建立的功能。
控制器
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope,ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
工厂
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
跟随发布的其他几个例子,但似乎没有任何工作
结果由工厂返回,无法将其传递给控制器
修改
真诚地感谢大家的答案,因为他们都非常有用,工作并且对承诺和回调有很多启发。
决定使用@Fernando Fabreti的答案,因为它尽可能接近我所寻找的。 p>
工厂
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(callback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
if(callback) callback(null, results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
控制器
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope, ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
答案 0 :(得分:2)
你需要定义一个回调参数和" call"一旦得到结果就回调:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(cback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
if (cback) cback(null, results);
}, function error(response){
console.log('error getting items');
if (cback) cback(response, null);
});
};
return{
getItems: getItems
};
});
答案 1 :(得分:1)
你正在混淆这里调用方法的回调和承诺样式。您似乎想要将回调传递给getItems(getItems不带参数)并使用工厂的基于promise的结果(尽管您没有返回任何承诺)。
决定你想做什么。如果你想使用promise表单做这样的事情(为了简单起见):
ifac <- with(RawData,
interaction(Participant,xVarCondition,Measure,drop=TRUE))
length(levels(ifac)) == nrow(RawData)
在你的控制器中用then或error函数做一些事情。
var getItems = function(){
return $http({
method: 'GET',
url: 'js/data/data.min.json'
})
};
答案 2 :(得分:1)
您应该使用从ItemsFactory.getItems().then(function(response) {
$scope.items = response.data;
})
.catch(function(response) {
console.error('error', response.status, response.data);
})
返回的承诺,而不是使用回调。只需返回$http
的结果,您就可以从中调用$http()
来获取数据。
工厂:
.then()
控制器:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
return $http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response){
return response.data;
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});