2016-12-19 9 views
1

イオンアプリケーションでデータベースの接続を開始しています。この接続をすべてのタブで使用できるようにしたいと思います。そのために私はサービスを行い、接続変数を保存してみてください。その後サービスが存在するかどうかのテスト

.service('connect', function() { 
      var arr = {}; 
      var connection = new ... 
      arr['connection'] = connection; 
      } 
      return arr; 
     }) 

、それらにアクセスするために、私が行います

connect.connection; 

は問題:私は、新しい接続をしたい私はconnect.connectionを行うだけでは初めて。他のものは変数を返すだけです。

私はそのような何でも試してみました:私のサービスの内部

if(connect == null){ 
      var connection = new ... 
      arr['connection'] = connection; 
} 

を、それが動作することはできません。

アイデアはありますか?サービスはので、これは一度だけ実行されますシングルトンである

.service('connect', function() { 
      var arr = {}; 
      var connection = new ... 
      arr['connection'] = connection; 

      return arr; 
     }) 

+1

角度サービスはシングルトンです。あなたは 'arr ['connection'] = new ...'を実行することができ、一度だけ実行されます。 Btw、 'this'は' service'サービスで 'return ...'の代わりに使われることになっています。 – estus

+0

ああ、サービスはシングルトンですか?本当に?それは私を助ける!ありがとう – anubis

+0

はい、それは角度のDIの重要な機能です。 https://docs.angularjs.org/api/auto/service/$provideをご覧ください。 – estus

答えて

0

私が正しくあなたを理解していれば、あなたのような何かを行うことができます。

connect.connection; 
1

角度JSサービスのようなその何かがシングルトンになっています。したがって、接続を取得する必要がある場合、そこに1つのオブジェクトのみですが、多くの場所に注入されます。 (オブジェクトはメソッドを参照して渡されます)

hereを参照してください。 ここでは、dbを初期化するためのサービスのメソッドを初期化した例があります。

.service('DBService', function($q, $http,$window,$cordovaSQLite) { 
     return { 
      initialize: function(dbname) { 
       var deferred = $q.defer(); 
       var promise = deferred.promise; 
       var response = {result : '',error : ''}; 
       try { 
        if ($window.cordova) { 
         //result = $cordovaSQLite.openDB("myapp.db"); 
         response.result = $cordovaSQLite.openDB({name:"dbname.db",location: 'default'}); 
        } else { 
         // Ionic serve syntax 
         response.result = $window.openDatabase("dbname.db", "1.0", "dbname", -1); 
        } 
        deferred.resolve(response); 
       } catch (error) { 
        response.error = error; 
        deferred.reject(response); 
       } 
       promise.success = function(fn) { 
        promise.then(fn); 
        return promise; 
       } 

       promise.error = function(fn) { 
        promise.then(null, fn); 
        return promise; 
       } 

       return promise; 
      } 
     } 
    }); 

そして、これがお手伝いします

$ionicPlatform.ready(function() { 
     DBService.initialize(db_name) 
      .success(function(data) { 
      //db object 
       $scope.db = data.result; 
      }).error(function(data) { 
       console.log(data); 
      }); 
    }); 

希望を次のようにあなたが好き呼び出す必要がコントローラで

関連する問題