在AngularJS和PouchDB中将数据和变量从服务传递到控制器

时间:2015-09-24 15:19:34

标签: javascript angularjs angularjs-scope pouchdb

我有一个看起来像这样的控制器:

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可用并将数据发送回控制器?

2 个答案:

答案 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});