基于特征检测的AngularJS服务注入

Posted

技术标签:

【中文标题】基于特征检测的AngularJS服务注入【英文标题】:AngularJS service injection based on feature detection 【发布时间】:2015-06-27 06:15:00 【问题描述】:

在我的 Angular 应用程序中,我需要创建一个持久化服务interface,它根据浏览器中可用的持久化机制调用具体的实现。我正在考虑使用一个通用的 storageService 来实现这一点,它调用一个了解存储机制的特定 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 

【问题讨论】:

【参考方案1】:
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 注入您想要的任何地方。

【讨论】:

正是我想要的!谢谢,Deblaton。

以上是关于基于特征检测的AngularJS服务注入的主要内容,如果未能解决你的问题,请参考以下文章

人脸识别系列之人脸检测--训练基于肤色特征的检测

火灾检测基于matlab实现图像特征火灾检测

基于图像质量失真特征分析的人脸活体检测-02

人脸检测——基于机器学习4HOG特征

火灾检测基于matlab连通区域+SVM特征融合火灾检测含Matlab源码 1223期

基于特征点检测的人脸融合技术