假设我有一个需要在每个角度模块中都可访问的全局常量,那么声明常量的建议方法是什么。我有三种方法,但我不确定要使用哪种方法。
感谢是否有人可以指出在这种情况下使用方法2与方法1相比有什么好处。
方法1(纯js常数):
var jsConstant = {
constant1: 'constant1',
constant2: 'constant2'
};
angular.module('mainApp').controller(['$scope', function($scope) {
$scope.constant1 = jsConstant.constant1;
$scope.constant2 = jsConstant.constant2;
}]);
方法2(纯角度常数)
angular.module('mainApp').constant('angularConstant', {
'constant1': 'constant1',
'constant2': 'constant2'
});
angular.module('mainApp').controller(['myConstant', '$scope', function(myConstant, $scope) {
$scope.constant1 = angularConstant.constant1;
$scope.constant2 = angularConstant.constant2;
}]);
方法3(js和角度常数的混合)
var jsConstant = {
constant1: 'constant1',
constant2: 'constant2'
};
angular.module('mainApp').constant('angularConstant", {
'constant1': jsConstant.constant1;
'constant2': jsConstant.constant2;
});
angular.module('mainApp').controller(['myConstant', '$scope', function(myConstant, $scope) {
$scope.constant1 = angularConstant.constant1;
$scope.constant2 = angularConstant.constant2;
}]);
答案 0 :(得分:1)
建议的方法是使用constant
:
(function(angular, undefined) {
'use strict';
angular.module('myApp.constants', [])
.constant('appConfig', {userRoles:['guest','user','admin']});
})(angular);
更好的方法是从服务器上为每个构建注入这些值,因为大多数时候你想在服务器上定义这些值而忘记在其他地方管理它们。为此,请查看ng-constant
或grunt
gulp
模块
修改强> 方法3只是方法2的一个混乱版本,在Angular模块之外有不必要的JS变量声明
方法1并不好,因为那些常量并不是真正可重用的。如果您有另一个想要重用这些值的控制器?
答案 1 :(得分:0)
在方法1中,您创建了一个全局变量jsConstants
,我认为,这不是一个好习惯 - 如果可能的话,应该避免创建全局常量。而且 - jsConstants
的属性并不是真正恒定的 - 任何地方的任何人都可以改变它们。此外,使用全局常量使控制器不易测试(单位),因为它们将依赖于此全局对象。
在方法2中,我认为不允许更改这些值,因此它们更多地作为常量值。你将它们注入控制器中,因此它们仍然可以进行单元测试。