我正在通过我的第一个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
块感到困惑。据推测,在此处声明的任何变量都将对该模块上的任何工厂可用?这并不清楚。我可以将所有代码移动到一个run块中,但是真的看不出有什么好处。
有人能澄清这里的最佳实践吗?