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

Passing data and variables from service to controller in AngularJS and 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 错误。

如何使数据库在服务中可用并将数据发送回控制器?

将您的 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;
    }
}]);

这里的问题是您在控制器中声明了您的 PouchDB 数据库,因此该变量不会暴露在服务中,这就是 db is not defined.

的原因

我在 Angular 中处理这个问题的方法是创建一个服务或工厂来管理 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});