gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:00:13 24 4
gpt4 key购买 nike

在我的 Angular 应用程序中,我需要创建一个持久性服务接口(interface),该接口(interface)基于浏览器中可用的持久性机制调用具体实现。我正在考虑使用一个通用的 storageService 来实现这个,它调用一个了解存储机制的特定 storageService 。

例如,通用的 storageService 将提供以下接口(interface):

angular
.module('app.storage')
.factory('storageService', storageService);

function storageService() {
return {
saveItem: saveItem,
getItem: getItem
}

...
}

storageService 将有多种实现,例如localStorageService、indexedDbStorageService、webSqlStorageService。

基于浏览器功能动态注入(inject)具体存储服务的最佳方法是什么。例如,
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(){

}

}

然后,您只需注入(inject)您的 storageService你想要的任何地方。

关于基于特征检测的AngularJS服务注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29749273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com