角度常量与JavaScript常量



假设我有一个全局常量,需要在每个角度模块中都可以访问,那么声明该常量的可取方法是什么。我脑海中有三个方法,但我不确定该使用哪种方法。

如果有人能指出在这种情况下使用方法 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;
}]);

建议使用constant

(function(angular, undefined) {
'use strict';
angular.module('myApp.constants', [])
.constant('appConfig', {userRoles:['guest','user','admin']});
})(angular);

更好的方法是在服务器的每个构建中注入这些值,因为大多数时候您希望在服务器上定义这些值,而忘记在其他地方管理它们。为此,请查看ng-constant模块gruntgulp

编辑方法 3 只是方法 2 的混乱版本,在 Angular 模块之外声明了不必要的 JS 变量

方法 1 不好,因为这些常量实际上不可重用。如果您有另一个控制器想要重用这些值?

在方法 1 中,您创建了一个全局变量jsConstants我相信这不被视为一种好的做法 - 如果可能的话,您应该避免创建全局常量。此外 - jsConstants的属性并不是真正恒定的 - 任何人,任何地方都可以改变它们。此外,使用全局常量会使控制器的可测试性(单元)降低,因为它们将依赖于此全局对象。

在方法 2 中,我相信您不允许更改这些值,因此它们更多地充当常量值。将它们注入到控制器中,因此它们仍然是可单元测试的。

最新更新