我想在我的角度工廠建立一個數據庫:角廠返回null
angular.module("App")
.factory("DatabaseFactory", function() {
var database = null;
var factory = {};
factory.getDatabase = function() {
if (database == null) {
window.sqlitePlugin.openDatabase({
name: "myDB.db",
androidDatabaseImplementation: 2,
androidLockWorkaround: 1
}, function (db) {
database = db;
database.transaction(function (transaction) {
transaction.executeSql(create_user, [], function (transaction, result) {
console.log("table user created: " + JSON.stringify(result));
}, function (error) {
console.log("table user error: " + error.message);
});
}, function (error) {
console.log("transaction error: " + error.message);
}, function() {
console.log("transaction ok");
return database;
});
});
} else {
return database;
}
}
return factory;
});
數據庫作品的創作,交易也行。我現在提供的服務與功能,以初始化數據庫:
angular.module("App")
.service("DatabaseService", function (DatabaseFactory) {
var database;
function initDatabase() {
console.log("init before database: " + JSON.stringify(database));
database = DatabaseFactory.getDatabase();
console.log("intit after database: " + JSON.stringify(database));
}
return {
initDatabase: function() {
initDatabase();
}
};
});
它被調用設備上的準備:
angular.module("App", ["ionic", "ngCordova", "App.Home"])
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider.state("app", {
url: "/app",
abstract: true,
templateUrl: "templates/main.html"
});
$urlRouterProvider.otherwise("/app/home");
})
.run(function ($rootScope, $ionicPlatform, DatabaseService) {
$ionicPlatform.ready(function() {
console.log("ionic Ready");
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
StatusBar.styleDefault();
}
DatabaseService.initDatabase();
});
});
日誌輸出:
init before database: + undefined
init after database: + undefined
這樣的回報我的工廠數據庫返回未定義,但我不知道爲什麼。它應該返回數據庫,因爲它已正確初始化。
非常感謝。這種回調方法是完美的解決方案。 – Mulgard