我在工厂中有数据,我可以在函数中的console.log中查看,如何将它放入我的控制器?
它刚刚回归未定义。
厂
.factory('ThemeColor', function() {
var db = new PouchDB('myDB');
var self = {
getColor: function(){
db.get('themeColor').then(function(data){
console.log(data);
return data;
});
},
}
return self;
});
控制器
$scope.ThemeColor = function(){
ThemeColor.getColor().then(function(data){
console.log(data);
});
};
答案 0 :(得分:1)
PouchDB
返回Promise
。 Angular在解析时需要知道Promise
。因此,在您的控制器中,使用inject $q
服务并将工厂包装在`$ q.when()中,如下所示:
.factory('ThemeColor', function($q) {
var db = new PouchDB('myDB');
var self = {
getColor: function(){
return $q.when(db.get('themeColor')).then(function (data) {
return data;
}).catch(function(err){
console.error(err);
});
}
}
return self;
});
您可以查看文档
答案 1 :(得分:0)
简单如下:
$scope.ThemeColor = function(){
$scope.color = null;
ThemeColor.getColor().then(function(data){
console.log(data);
$scope.color = data; // i am color
});
};
答案 2 :(得分:0)
你不能从.then(function(data){})返回一个值,因为function(data){}是回调。
您可以使用以下解决方案来满足您的需求:
.controller('myCntrl', function($scope, ThemeColor) {
function successCallback(res) {
console.log(res);
}
function failureCallback(res) {
// @TODO
}
$scope.ThemeColor = function(){
ThemeColor.getColor(successCallback, failureCallback);
};
});
.factory('ThemeColor', function() {
var db = new PouchDB('myDB');
var self = {
getColor: function(successCallback, failureCallback){
db.get('themeColor').then(function(data){
successCallback(data);
}, function(data) {
failureCallback(data);
});
}
}
return self;
});