gpt4 book ai didi

javascript - 是否可以根据配置更改在 AngularJS 中使用不同的模块?

转载 作者:行者123 更新时间:2023-11-28 01:06:30 24 4
gpt4 key购买 nike

我有点了解 DI 如何与 AngularJS 中的模块配合使用,我希望能够利用这一点,根据应用程序的环境使用不同的模块。

例如,我想制作一些可以在移动设备(使用 Phonegap)和常规桌面浏览器上运行的东西。

我想使用一个服务函数来访问数据。在设备上,我只想让它查询设备上的本地数据库。对于桌面浏览器版本,我希望它查询 Web 服务。

例如,我想要 2 个可以互换的服务:

angular.module('myDataServiceLocalStorage', [])
.factory('dataSrv', [function () {
return {
getOrders: function () {
//get from database
}
};
} ])
;

angular.module('myDataServiceWebService', [])
.factory('dataSrv', [function () {
return {
getOrders: function () {
//get from web service
}
};
} ])
;

在我的 Angular Controller 中,我可以注入(inject) myDataServiceLocalStorage 或 myDataServiceWebService 来访问 getOrders 函数,但是如何更好地配置它以在我的所有 Controller 中使用其中一个或另一个?

我不一定需要它自动检测环境,但是有没有办法可以做到这一点,这样我就不必在每次准备部署项目时全局搜索和替换每个模块引用?

我正在考虑与提供者一起做一些事情,但我很困惑,我不认为这是他们的主要目的(看起来 Angular 提供者只是在实例化之前修改单个现有服务)

这样的事情可能吗?

最佳答案

我有类似的要求,我所做的是为每个设备创建单独的工厂。

app.factory("deviceOneFactory", function(){
var renderOne = function(params) {
// logic for rendering typeOneChart
};

return {
render : renderOne
}
})

app.factory("deviceTwoFactory", function(){
var renderTwo = function(params) {
// logic for rendering typeTwoChart
};

return {
render : renderTwo
}
})

所以你有上面的工厂,返回相同的函数名称集,所以它是一种实现接口(interface)。

然后有一个父工厂,它使应用程序的其他部分与此部分无关

app.factory("deviceFactory", function(){

var localFactory ;

var deviceFactory = function(){
switch(devicetype) {
case 'one':
localFactory = typeOneDevice;
break;
case 'two':
localFactory = typeTwoDetive;
break;
default:
throw exception("invalid device type : " + deviceType);
}
}

var render = function(params) {
localFactory.render();
};

return {
render : render
}
})

注意:上面的代码并不准确,只是为了给您一个想法。

关于javascript - 是否可以根据配置更改在 AngularJS 中使用不同的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020086/

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