在 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});
我有一个看起来像这样的控制器:
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});