我有一个看起来像这样的控制器:
angular.module('msfLogger', ['offClick', 'ngBootstrap', 'ngSanitize','ngCsv', 'angularFileUpload', 'pouchdb'])
.controller('LoggerCtrl',['$scope', 'dataService', 'pouchDB', function($scope, dataService, pouchDB){
var db = pouchDB('FleetDB');
$scope.addTodo = function() {
var movement = {
_id: moment().format("YYYYMMDDHHmmss"),
type: 'move',
duration:''
};
db.put(movement, function(err, res) {
if (err) { console.log(err); }
});
}
$scope.recordlist = dataService.get();
console.log($scope.recordlist);
第一个功能正常,可将数据保存到数据库中。
但是,我尝试使用服务检索此数据:dataService.get();
服务如下:
angular.module('msfLogger').service('dataService', extractRecords);
function extractRecords() {
var data = db.allDocs({startkey: 'move_', endkey: 'move_\uffff', include_docs: true})
return {
get: data;
}
};
我收到db is not defined
错误。
如何在服务中使db可用并将数据发送回控制器?
答案 0 :(得分:1)
将pouchDb
服务注入您的服务,就像您在控制器中所做的那样。
angular.module('msfLogger').service('dataService', ['pouchDB',function(pouchDB){
//get an instance of your db
var db = pouchDB('FleetDB');
var data = db.allDocs({startkey: 'move_', endkey: 'move_\uffff', include_docs: true})
return {
get: data;
}
}]);
答案 1 :(得分:1)
这里的问题是您在控制器中声明了PouchDB数据库,因此该变量未在服务中公开,这就是db is not defined
的原因。
我在Angular中处理这个问题的方法是创建一个Service或Factory来管理PouchDB,因为它们都是单例,然后你可以将这个服务注入你的dataService
,或者在任何其他服务中使用它管理数据库。
angular.module('msfLogger').service('pouchService', PouchService);
function PouchService() {
var self = this;
self.db= new PouchDB('FleetDB');
}
注射后而不是这样做:
var data = db.allDocs({startkey: 'move_', endkey: 'move_\uffff', include_docs: true});
点赞:
var db = pouchService.db;
var data = db.allDocs({startkey: 'move_', endkey: 'move_\uffff', include_docs: true});