在 Angular 服务中初始化数据的位置
Where to initialise data in Angular service?
我正在用我的第一个 Angular 应用程序找到自己的方式,其中一个服务(用于生成 SQL 查询字符串)需要使用在其 constant
块中声明的架构进行初始化。目前模式/配置尚未完成,因此我正在做一些处理,然后将结果提供给服务内的私有变量。
我想要一些关于执行此操作时最佳实践的指导。看起来有 3 个选项。
1) 在工厂公开一个公共init
函数,并从其他地方调用它
这是一种可能性,但我不想从其他地方启动工厂(这将是加载的第一件事)。
2)在工厂主体中使用IIFE
这可能很臭,但实际上效果很好。
angular.module('dataService', [])
.constant('DB_CONFIG', {
// ...data used to bootstrap the service
})
.factory('sqlQueries',
['DB_CONFIG',
function(){
var privateStuff_;
(function(){
// do processing work on DB_CONFIG in here
privateStuff_ = result;
})();
return {
// no init function needed!
publicMethod1: publicMethod1
}
}
])
3) 使用run
块
老实说,我对Angular的run
块感到困惑。大概这里声明的任何变量都可用于该模块上的任何工厂?这并不清楚。我可以将所有代码移动到运行块中,但看不到好处。
任何人都可以澄清这里的最佳实践吗?
初始化服务的最佳位置是配置块 - 这就是它们的用途。 有5种服务:
- 厂
- 服务
- 供应商
- 价值
- 不断
为了设置您的服务,以便可以在您的配置块中注入和初始化它,您应该实现一个"提供程序"。
例:
var app = angular.module('app', []);
app.provider('dataService', function() {
var privateStuff_;
this.init = function(db_config) {
// do processing work on DB_CONFIG in here
privateStuff_ = result;
}
function publicMethod1() {
...
}
this.$get = function() {
return {
publicMethod1: publicMethod1
}
}
});
将DB_CONFIG设置为常量(否则,无法将其注入到配置块中):
app.constant('DB_CONFIG', {
...
});
然后在配置块中,注入提供程序,并使用DB_CONFIG对其进行配置:
app.config(function(dataServiceProvider, DB_CONFIG) {
dataServiceProvider.init(DB_CONFIG);
});
相关文章:
- Wordpress元盒订单数据位置
- 将iPhone位置数据输入谷歌地图
- 如何在 Google App Engine 上存储 HTML 5 地理位置数据
- Ajax调用正在将数据插入页面的其他位置
- 更新数据后保留D3图的位置
- PHP生成的表列数据不在正确的位置
- 如何同步检测用户是否拒绝访问地理位置数据
- JQueryMobile内容在页面转换后跳转(使用数据位置=“固定”)
- 在 Angular 服务中初始化数据的位置
- Angular js cordova地理位置获取当前位置并在后台将数据发送到服务器
- 合并位置并从 JSON 输出组合数据
- 为 Shield UI JavaScript 数据系列点的每个点打开特定位置
- 在 html5 视频的元数据中保存 fps 的位置
- 如何在 HTML5 放置事件的特定位置附加数据传输内容
- 哪些字节的视频数据是指当前播放位置
- 根据我的位置对数据进行排序并预定义城市名称
- 如何在窗口位置之后存储数据
- 为什么数据位置=“;固定的“;数据抽头切换=“;false”;不起作用
- 如何防止在发送数据(位置,纬度&经度)从客户端到服务器端
- 一旦设置好,引导弹出箭头将不会随着数据位置的变化而改变