覆盖angularJS中模块值/常量的最佳方式
Best way to override module values/constants in angularJS
我用angularJS编写了一个模块,它封装了所有后端通信。为了获得更大的灵活性,我将api前缀作为模块上的常量值(可能是值,因为我在配置阶段没有使用它)。所以像这样的东西
angular.module('myapp.data').constant('apiPrefix', '/api/data');
现在我想从两个不同的应用程序中使用这个模块。其中一个使用/api1/data,另一个使用-api2/data,我想在应用程序的配置阶段更改这一点。我知道如何使用提供程序做到这一点,但让提供程序保存值对我来说似乎有些过头了。我可以从应用程序配置阶段修改使用的模块常量或值吗?
类似于:
angular.module("data", [])
.value('apiPrefix', '/api/data')
.factory('display', function(apiPrefix){
return {
pref: function(){
console.log(apiPrefix);
return apiPrefix;
}
}
});
angular.module("myApp",['data'])
.config(['apiPrefix', function(prefix){
prefix = 'https:/api/data';
}])
.controller("Example", function($scope, display) {
$scope.prefix = display.pref;
});
要覆盖模块值,可以在以后的模块中重新定义角度值。我认为这不应该在模块配置时完成。
angular.module("data", [])
.value('apiPrefix', '/api/data')
.factory('Display', function(apiPrefix){
return {
pref: function(){
return apiPrefix;
}
}
});
angular.module('myapp', ['data'])
.value('apiPrefix', '/api2/data')
.controller('MainCtrl', function($scope, Display) {
$scope.name = Display.pref();
});
请参阅此处的plunker:http://plnkr.co/edit/k806WE
同样的道理也适用于角常数。
我们的模块
angular.module("data", [])
.constant('apiPrefix', '/api/data');
我们可以像value
一样完全覆盖constant
。
angular.module('myapp', ['data'])
.constant('apiPrefix', '/api2/data');
我们也可以在config
中完全覆盖
angular.module('myapp', ['data'])
.config(function ($provide) {
$provide.constant('apiPrefix', '/api2/data');
});
我们也可以在run
中完全或部分覆盖(如果对象)
angular.module('myapp', ['data'])
.run(function (apiPrefix) {
apiPrefix = '/api2/data';
});
但是,如果我们想用部分处于配置(未运行)中的对象覆盖constant
,我们可以做这样的
angular.module("module1", [])
.constant('myConfig', {
param1: 'value1' ,
param2: 'value2'
});
angular.module('myapp', ['data'])
.config(function ($provide, myConfig) {
$provide.constant(
'myConfig',
angular.extend(myConfig, {param2: 'value2_1'});
);
});
角度模块、控制器等可以包含在函数、if语句等中。它们不必位于顶级。所以,你可以在你的代码中包括这一点:
if (environmentOne()) {
module.value('apiPrefix','api1/data');
} else {
module.value('apiPrefix','api2/data');
}
希望能有所帮助!
相关文章:
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 有条件更新d3.js力图中节点的最佳方法
- 为react组件传递道具的最佳方式
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- Angularjs 1.5.x本地化最佳实践
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- MobileFirst:在客户端运行计时器作业-最佳选项
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 从数组中删除元素的最佳方法是:javascript/jquery
- 在Javascript中将字符串文本提取为常量是一种最佳实践吗
- 用Javascript实现PHP常量的最佳方式
- Angularjs模块范围常量的最佳实践
- 覆盖angularJS中模块值/常量的最佳方式
- 使用Backbone.JS在服务器和客户端之间共享常量的最佳实践