0
我有一個用AngularJS開發的Cordova跨平臺應用程序,它實現了SQLite數據庫。這個想法是,用戶可以登錄,他們的詳細信息將被存儲在SQLite數據庫中以供離線訪問(例如,記住我的功能)。
在登錄屏幕上,我運行一個查詢,在應用程序啓動後立即檢查SQLite表中是否有值。然後根據表中是否有值,我會顯示登錄確認屏幕或要求用戶輸入他們的詳細信息。
數據庫按預期工作,我可以保存並讀取詳細信息。但是,因爲數據庫異步處理調用,所以無法向用戶顯示正確的用戶界面。
在我的登錄視圖中,我有一個變量來保存布爾值,無論SQLite表是否包含值。但是,變量始終爲爲空/空,因爲異步調用在變量初始化後響應。
我試圖執行$ q來初始化異步調用完成後的變量,但我遇到了實現的麻煩。
我的看法控制器,如下所示:
控制器
var login = angular.module("loginController", []);
login.controller("LoginController", function ($scope, $q, QueryRememberMe) {
// Check if user logged in
var logged = QueryRememberMe.query();
logged.then(function (greeting) {
alert("Success: " + greeting);
}, function(reason) {
alert("Failed: " + reason);
});
};
});
QueryRememberMe服務
var queryRememberMe = angular.module("queryRememberMe", []);
queryRememberMe.service("QueryRememberMe", function ($q, Database) {
var db = Database.init();
var tableName = "tb_UD_remember_me";
var userLoggedIn = "";
var myFunctions = {
query: function() {
return $q(function (resolve, reject) {
var sql = 'SELECT * FROM ' + tableName;
db.transaction(function (tx) { tx.executeSql(sql, [], myFunctions.success, myFunctions.error); });
if (myFunctions.success) {
resolve('Hello, success!');
}
else {
reject('Greeting ERROR - is not allowed.');
}
});
},
// Query success callback
success: function (tx, results, tableName) {
// There are no values in the table
if (results.rows.length == 0) {
userLoggedIn = false;
}
else {
userLoggedIn = true;
}
return userLoggedIn;
},
// Query Error Callback
error: function (tx, err) {
alert("An error has occured - Unable to query SQL Table " + tableName);
},
}
return myFunctions;
});