У меня есть данные на фабрике, которые я могу просмотреть в 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);
});
};
PouchDB
возвращает Promise
. Угловой должен знать о Promise
когда он решает. Таким образом, в вашем контроллере используйте команду add $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;
});
Вы можете проверить документы
Угловая документация по $ q.when()
Замечание PouchDB на угловом $ q.when(). Прочтите секционные Promises
Вы не можете вернуть значение из. Then (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;
});
Так просто как:
$scope.ThemeColor = function(){
$scope.color = null;
ThemeColor.getColor().then(function(data){
console.log(data);
$scope.color = data; // i am color
});
};