AngularJS 基于特征检测的服务注入
AngularJS service injection based on feature detection
在我的 Angular 应用程序中,我需要创建一个持久性服务 接口 调用具体的 实现 基于我的浏览器中可用的持久性机制。我正在考虑使用调用理解存储机制的特定 storageService 的通用 storageService 来实现它。
例如,通用存储服务将提供以下接口:
angular
.module('app.storage')
.factory('storageService', storageService);
function storageService() {
return {
saveItem: saveItem,
getItem: getItem
}
...
}
storageService 将有多个实现,例如localStorageService、indexedDbStorageService、webSqlStorageService。
根据浏览器特性动态注入具体存储服务的最佳方式是什么。例如,
if (isWebSqlAvailable()) {
// inject webSqlStorageService
}
else if (isIndexedDbAvailable() {
// inject indexedDbStorageService
}
else if (isLocalStorageAvailable() {
// inject localStorageService
}
angular
.module('app.storage')
.factory('storageService', ['$injector', storageService]);
function storageService($injector) {
var svc;
if (isWebSqlAvailable()) {
svc = $injector.get('webSqlService');
}
else if (isIndexedDbAvailable() {
svc = $injector.get('indexedDbService');
}
else if (isLocalStorageAvailable() {
svc = $injector.get('localStorageService');
}
return svc;
}
angular
.module('app.storage').factory('webSqlService', webSqlService);
function webSqlService(){
return {
saveItem: saveItem,
getItem: getItem
}
function getItem(){
}
function saveItem(){
}
}
angular
.module('app.storage').factory('indexedDbService', indexedDbService);
function indexedDbService(){
return {
saveItem: saveItem,
getItem: getItem
}
function getItem(){
}
function saveItem(){
}
}
然后,您只需将 storageService
注入到您想要的任何地方。
在我的 Angular 应用程序中,我需要创建一个持久性服务 接口 调用具体的 实现 基于我的浏览器中可用的持久性机制。我正在考虑使用调用理解存储机制的特定 storageService 的通用 storageService 来实现它。
例如,通用存储服务将提供以下接口:
angular
.module('app.storage')
.factory('storageService', storageService);
function storageService() {
return {
saveItem: saveItem,
getItem: getItem
}
...
}
storageService 将有多个实现,例如localStorageService、indexedDbStorageService、webSqlStorageService。
根据浏览器特性动态注入具体存储服务的最佳方式是什么。例如,
if (isWebSqlAvailable()) {
// inject webSqlStorageService
}
else if (isIndexedDbAvailable() {
// inject indexedDbStorageService
}
else if (isLocalStorageAvailable() {
// inject localStorageService
}
angular
.module('app.storage')
.factory('storageService', ['$injector', storageService]);
function storageService($injector) {
var svc;
if (isWebSqlAvailable()) {
svc = $injector.get('webSqlService');
}
else if (isIndexedDbAvailable() {
svc = $injector.get('indexedDbService');
}
else if (isLocalStorageAvailable() {
svc = $injector.get('localStorageService');
}
return svc;
}
angular
.module('app.storage').factory('webSqlService', webSqlService);
function webSqlService(){
return {
saveItem: saveItem,
getItem: getItem
}
function getItem(){
}
function saveItem(){
}
}
angular
.module('app.storage').factory('indexedDbService', indexedDbService);
function indexedDbService(){
return {
saveItem: saveItem,
getItem: getItem
}
function getItem(){
}
function saveItem(){
}
}
然后,您只需将 storageService
注入到您想要的任何地方。