我应该如何在AngularJS中配置模块
How should I make configurable modules in AngularJS
我一直在摆弄AngularJS,我已经建立了一个指令和服务的小集合,我想把它们打包到一个单独的JS文件中,这样我就可以在任何地方使用它们了。
我有一些网站特定的设置,我的模块将需要API调用和那种东西。我只是想知道Angular制作可配置模块的方式是什么。显然,我不想为每个网站修改我的可重用JS文件,因为那样会违背拥有它的目的。由于每个网站的值都保持不变,因此将它们作为每个函数调用的参数传递给它们似乎是非常麻烦的,我宁愿尽可能地远离全局变量。
我已经为我寻求的答案搜索了很多问题,到目前为止,我发现最接近的模式是让我的可重用模块依赖于一个不包含的模块,称为"设置"或其他东西,然后在页面的JS文件中定义该模块,允许可重用模块从中提取值。这里有一个例子来说明我的意思。
这对我来说似乎是倒退的。这有点像让一个函数从全局值中提取值,而不是将值作为参数传递。
这真的是最好的方法吗,还是有其他选择?
听起来你在寻找供应商。
下面是一个非常基本的提供者示例:只有当你想要为应用程序范围内的配置公开API时,你才应该使用Provider配方,而这些配置必须在应用程序启动之前进行。这通常只对行为可能需要在应用程序之间略有不同的可重用服务感兴趣。
myMod.provider('greeting', function() {
var text = 'Hello, ';
this.setText = function(value) {
text = value;
};
this.$get = function() {
return function(name) {
alert(text + name);
};
};
});
这创建了一个新的服务,就像您使用myMod.service
或myMod.factory
一样,但是提供了一个在配置时可用的额外API,即setText
方法。您可以访问config
块中的提供程序:
myMod.config(function(greetingProvider) {
greetingProvider.setText("Howdy there, ");
});
现在,当我们注入greeting
服务时,Angular会调用该提供商的$get
方法(在它的参数中注入它所请求的任何服务),并返回它所返回的值;在本例中,$get
返回一个函数,当使用名称调用该函数时,将使用我们在setText
中设置的任何内容提醒该名称:
myMod.run(function(greeting) {
greeting('Ford Prefect');
});
// Alerts: "Howdy there, Ford Prefect"
这正是其他提供商,如$httpProvider
和$routeProvider
的工作方式。
有关提供商和依赖注入的更多信息,请查看有关依赖注入的SO问题。
- RequireJS向模块传递配置总是返回undefined
- 使用在子模块内部的父模块上定义的常量's配置
- webpack配置警告和错误:;模块解析失败”;
- 路径和填充程序的模块配置
- 使用Angular JS将常量注入其他模块配置
- 如何配置 gulpjs,以便 ngrok 模块可用于为 pagespeed insight 插件提供 url
- 设置 npm 模块配置的最佳方法
- 配置需要 js 才能在 javascript 中加载 AMD 模块
- AngularJS 我应该在哪里设置或存储模块的配置
- 如何使用 RequireJS 构建多个模块,使用一个带有覆盖的物理配置文件
- 如何访问模块配置中的工厂
- RequireJS:在加载库模块后自动加载配置脚本
- AngularJS-如何在配置函数中使用$routeProvider和自定义模块
- 如何在模块配置中使用Angular.js服务实例并保持相同的实例
- node_modules中编译模块的Webpack配置
- AngularJS模块中的多重配置
- 模块是否应该在express.js的所有路由中使用app.use进行配置
- 是否可以使用$logProvider登录模块的配置块
- 用mocha测试依赖于环境变量process.env.APP_ENV的配置模块
- 我应该如何在AngularJS中配置模块