我正在开发一个Angular应用程序,该应用程序对几个Web服务进行多次调用。我想开发一个离线组件,将某些Web服务结果缓存到LocalStorage中,并在连接离线时使用它们。
这部分相当简单,我遇到最大的问题是应用程序离线时如何进行逻辑分支。
以下是我的当前流程:
1.用户加载页面
2.Web服务调用按照通常方式处理
3.$http拦截器查找404错误并标记$rootScope.isOnline布尔标志以指示我们处于离线状态,否则如果没有404,则标记为在线。
我希望我的代码可以根据此标志进行分支,以便易于维护。因此,我考虑使用依赖注入来注入一个“在线”服务,该服务调用Web服务,或者注入一个“离线”服务,该服务与本地存储结果进行交互(如果存在)。
我是否可以基于在线/离线标志来进行依赖注入,以注入正确的服务?
我遇到的问题是,在第一次调用我的web服务之前,
这是否是在Angular中开发在线/离线应用程序的正确方式,还是有更好的方法?
这部分相当简单,我遇到最大的问题是应用程序离线时如何进行逻辑分支。
以下是我的当前流程:
1.用户加载页面
2.Web服务调用按照通常方式处理
3.$http拦截器查找404错误并标记$rootScope.isOnline布尔标志以指示我们处于离线状态,否则如果没有404,则标记为在线。
我希望我的代码可以根据此标志进行分支,以便易于维护。因此,我考虑使用依赖注入来注入一个“在线”服务,该服务调用Web服务,或者注入一个“离线”服务,该服务与本地存储结果进行交互(如果存在)。
我是否可以基于在线/离线标志来进行依赖注入,以注入正确的服务?
.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中开发在线/离线应用程序的正确方式,还是有更好的方法?