我正在我的离子应用程序中打开数据库的连接。我希望这个连接可以在所有选项卡中使用。为此我做了一个服务,并尝试在其中保存连接变量。
.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;
}
在我的服务中,但它无法正常工作。
你有什么想法吗?
答案 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;