测试服务是否存在

时间:2016-12-19 12:12:54

标签: angularjs ionic-framework

我正在我的离子应用程序中打开数据库的连接。我希望这个连接可以在所有选项卡中使用。为此我做了一个服务,并尝试在其中保存连接变量。

.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;
}

在我的服务中,但它无法正常工作。

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Angular JS Services是单例,只有一个对象,但被注入很多地方。 (通过引用方法传递对象)

有关文档,请查看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);
          });
    });

希望这会对你有所帮助。

答案 1 :(得分:0)

如果我理解你的话,你可以这样做:

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

            return arr;
        })

服务是单身,所以这只会运行一次。 因此,当您需要检索连接时,如

connect.connection;