いくつかの Web サービスを多数呼び出すアプリケーションを Angular で開発しています。特定の Web サービスの結果を LocalStorage にキャッシュし、接続がオフラインのときにそれらを使用するように、アプリにオフライン コンポーネントを開発したいと考えています。
その部分はかなり単純で、私が最も苦労している部分は、アプリがオフラインのときに論理的に分岐する方法です。
これが私の現在の流れです:
- ユーザーがページを読み込む
- Web サービスの呼び出しは通常どおり行われます
- $http インターセプターは 404 エラーを探し、
$rootScope.isOnline
オフラインであることを示すブール値フラグをマークします。それ以外の場合は、404 がない場合はオンラインとしてマークします
保守可能な方法で、このフラグに応じてコードを分岐させたい。そのため、依存性注入を使用して、Web サービスを呼び出す「オンライン」サービス、または存在する場合は LocalStorage の結果とやり取りする「オフライン」サービスのいずれかを注入することを検討していました。
オンライン/オフラインフラグに基づいて依存性注入を行い、正しいサービスを注入することはできますか?
.factory('AuthService', ['$rootScope', '$injector', function($rootScope, $injector) {
if($rootScope.isOnline) {
return $injector.get('OnlineAuthService');
}
else {
return $injector.get('OfflineAuthService');
}
}])
.service('OnlineAuthService', ['$rootScope', '$http', '$location', 'serviceEndpoint', 'securityEndpoint', 'organisationId', function ($rootScope, $http, $location, serviceEndpoint, securityEndpoint, organisationId) {
this.ensureSession = function (data) {
// Do some connection to the webservice
};
}])
.service('OfflineAuthService', ['$rootScope', function ($rootScope) {
this.ensureSession = function (data) {
// Do some LocalStorage stuff
};
}])
AuthService.ensureSession(data);
私が抱えている問題は、Web サービス$rootScope.isOnline
への最初の呼び出しの前にオフラインとしてマークされていないため、接続がオフラインの場合でも、依存関係の注入が$rootScope.isOnline
OnlineAuthService を見て注入することです。
これは Angular でオンライン/オフライン アプリを開発する正しい方法ですか、それとももっと良い方法がありますか?