我一直在修改AngularJS,我已经建立了一小部分指令和服务,我想把它打包成一个JS文件,以便我可以在任何地方使用它们.
我有一些网站特定的设置,我的模块将需要API调用等等.我只是想知道Angular制作可配置模块的方法是什么.显然,我不想为每个网站修改我的可重用JS文件,因为这样做会破坏它的目的.看到每个网站的值保持不变,将每个函数调用作为参数传递它们似乎是一件非常麻烦的事情,而且我宁愿尽可能远离全局变量.
我已经搜索了很多问题以寻找我所寻求的答案,而我到目前为止找到的最接近的模式是让我的可重用模块依赖于一个名为"settings"之类的未包含的模块,然后定义该模块.页面的JS文件,允许可重用模块从中提取值.这是一个展示我的意思的例子.
这似乎是我的倒退.这有点像从全局值中获取函数pull值而不是将值作为参数传递.
这真的是最好的方法吗,还是有替代方案?
我在子模块中有一个服务包装一些第三方模块,实例化并初始化其服务以准备在app中使用.
@Injectable()
class SubmoduleInitializerService {
constructor (thirdPartyService: ThirdPartyService) {
thirdPartyService.initialize(...);
...
}
}
@NgModule({
imports: [ThirdPartyModule],
exports: [ThirdPartyModule],
providers: [
ThirdPartyService,
SubmoduleInitializerService
]
})
class AppSubmodule {}
Run Code Online (Sandbox Code Playgroud)
ThirdPartyService不是直接在应用程序中注入,而是被其他ThirdPartyModule单位使用,因此只要SubmoduleInitializerService注入相同的注射器ThirdPartyService或父注射器,一切都很好:
export class AppComponent {
constructor(
/* DO NOT REMOVE! BAD THINGS HAPPEN! */
submoduleInitializerService: SubmoduleInitializerService
) {}
...
}
Run Code Online (Sandbox Code Playgroud)
它被证明是一种糟糕的模式,因为如果它既不在课堂上也不在模板中使用(如果已经被意外删除)SubmoduleInitializerService,AppComponent那么为什么要注入它并不明显.
基本上AppSubmodule模块需要Angular 1.x angular.module(...).run(...)块的替代方案.
这里有什么选择?
让我从理由开始.许多已经使用AngularJS多年的公司仍在使用它,并且没有立即计划迁移到4+.因此具有可销售性,以及将两者都视为Angular开发人员的必然要求.
我的问题很广泛,但我很想听听那些对两者都有经验的人.它们是完全不同的,还是会将某些知识转移?对于那些非常了解两者的人来说,真正对你有哪些重要区别?