很抱歉,我是AngularJS的新手,我不明白这种行为......
我试图使用工厂,但我总是得到一个未定义的响应...
所以,我有一个名为pollsData的工厂,这个工厂是在AddDataPollController控制器中注入的,在那里我使用工厂的getPoll方法,注意我打印从工厂函数返回的内容......
.controller('AddDataPollController', ['$scope', 'Restangular', '$state', '$stateParams', 'pollsData', // factory
function($scope, Restangular, $state, $stateParams, pollsData) {
console.log(pollsData.getPoll());
.
.
.
然后,在getPoll方法中,我发出一个Restangular请求来获取id为192的轮询,在同一个函数中我打印从restangular请求返回的内容。
.factory('pollsData', ['Restangular', '$state', '$stateParams',
function(Restangular, $state, $stateParams) {
var data = {
polls: []
};
data.getPoll = function() {
Restangular.one('polls', 192).get().then(function(poll) {
console.log(poll);
angular.copy(poll, data.polls);
return poll;
});
};
return data;
}])
现在我不明白的是,当我从工厂打印响应时,我看到了正确的数据,但当我尝试打印从控制器获得的内容时,它只显示未定义的单词,在这两种情况下都不应该打印相同的对象吗?
答案 0 :(得分:0)
您在此处理async
逻辑。您需要返回解析并使用响应,或者返回解析,然后引用工厂数据。
更新至:
.factory('pollsData', ['$q','Restangular', '$state', '$stateParams',
function($q Restangular, $state, $stateParams) {
var data = {
polls: []
};
data.getPoll = function() {
var deferred = $q.defer();
Restangular.one('polls', 192).get().then(function(poll) {
console.log(poll);
angular.copy(poll, data.polls);
return deferred.resolve(poll);
}, deferred.reject);
return deferred.promise;
};
return data;
}])
在您的控制器中:
pollsData.getPoll().then(setData, onError);
function setData(data){
console.log(data);
}
function onError(error){
console.error(error);
}