PhoneGap と AngularJS を使って、オンラインでもオフラインでも使えるアプリを作ってみました (Android 端末用)。
デバイスがオフラインの場合はローカル データベースからユーザーのリストを取得し、デバイスがオンラインの場合は $http を使用して Web サービスからユーザーのリストを取得したいと考えています。ただし、デバイスがオンラインの場合は機能せず、Web サービスは呼び出されません。
問題は PhoneGap 非同期メソッドだと思います。実際、オフライン モードでは動作しますが、ビューを更新するには $scope.$apply を使用する必要があります。しかし、それは $http では機能しません...
誰かが非同期メソッドで $http を使用する方法を知っていますか?
function ListCtrl ($scope, $http){
$scope.list = [];
$scope.Id = 2;
$scope.init = function(){
document.addEventListener("deviceready", getList, false);
}
$scope.getAll = function(){
$http({
url: 'http://10.0.0.2:63414/myWebMethod/' + $scope.Id,
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function(data) {
$scope.list = data;
});
}
function getList(){
var db = window.openDatabase("Database", "1.0", "list", 200000);
var network = navigator.connection.type;
if (network == "none"){
// local database transaction works fine
} else {
$scope.getAll();
}
$scope.$apply();
}
$scope.init();
}