2016-03-22 5 views
0

PouchDBとSQLiteプラグインを使用するIonicアプリケーションを作成しています。2番目のAngularファクトリーでPouchDBを開くと、PouchはSQLiteプラグインを使用しません。

.factory('PouchdbFactory', ['$q', function ($q) { 

     var db, 
      codes = []; 

     var initDB = function() { 
      db = new PouchDB('codes', {adapter: 'websql', auto_compaction: true, location: 2}); // location should be 2 
      // Listen for changes on the database 
      db.changes({ live: true, since: 'now', include_docs: true}).on('change', onDatabaseChange); 

      db.info().then(console.log.bind(console)); 
     } 
...etc... 

し、定期的にレコードを取得し、それらを変更するために使用されるメソッドを返し、別の工場:私は、DBを開いてなど、レコードを取得するためのいくつかのメソッドを公開する責任の工場を持っています。 SQLiteのプラグイン(db.info().then(console.log.bind(console));戻りsqlite_plugin: false)を使用していないポーチ第二工場の結果でPouchdbFactory.initDB();を呼び出す

.factory('OtpFactory', ['$rootScope', '$interval', 'PouchdbFactory', function($rootScope, $interval, PouchdbFactory) { 

     var otpCodes, 
      globalTimerPromise, 
      totpObj = new TOTP(); 

     // this breaks sqllite plugin (db.info().then(console.log.bind(console)); returns sqlite_plugin: false) 
     PouchdbFactory.initDB(); 

     PouchdbFactory.getAllCodes().then(function(codes) { 
      otpCodes = codes; 
     }); 

私はまだAngularを学んでいますので、おそらくこれは構造化する方法ではありません。私は$rootscopeにデータベースを移動することができますので、データベースはすべての工場でアクセスできますが、なぜPouchdbFactory.initDB();を呼び出すのがなぜsqlite_pluginを意味しないのかわかりません。

アイデア?

答えて

0

エラーの原因ではありませんが、初期化されていればdbインスタンスを返すことになります。チェックdbが初期化されているinitでガード句を試してください。リターンdbをすぐに持っていればそれを初期化してください。

関連する問題