【问题标题】:AngularJS module.constant() : how to define a constant inside a module only?AngularJS module.constant() :如何仅在模块内定义常量?
【发布时间】:2016-04-23 19:08:45
【问题描述】:

在一个页面上,我有几个 Angular 模块。 对于每个模块,我定义一个包含模块版本的常量。

var module1 = angular.module('module1').constant('version', '1.2.3');
var module2 = angular.module('module2').constant('version', '2.0.0');
...

我虽然在内部模块中定义了一个常量。但是当我在 module1 中使用常量时,我​​得到的值是 '2.0.0'...

有没有办法定义一个适合模块的常量(或其他任何东西)?

编辑:对于替代解决方案,您能否解释一下如何使用它,例如在控制器声明中?

module2.controller('myCtrl', function( $scope, $http, $q, ..., version ){
    // Here I can use the constant 'version'
}

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

一个很好的问题。我可以想到一个快速解决方法:

angular.module('module1').constant('module1.version', '1.2.3');
angular.module('module2').constant('module2.version', '2.0.0');

我不知道它在多大程度上适合您的需求。但我希望它会有所帮助。

主要问题是 Angular 中的命名。服务/常量/值等不能使用相同的名称。它们将被覆盖。我用上面展示的“命名空间”解决了这个问题。

注入类似名称的命名空间示例:http://codepaste.net/5kzfx3

编辑:

对于您的示例,您可以像这样使用它:

module2.controller('myCtrl', ['$scope', '$http', '$q', ... , 'module2.version'], function( $scope, $http, $q, ..., version ){
    // Here I can use the constant 'version'
}

【讨论】:

  • 如何注入名称中带有点的常量? (例如在我的模块内的控制器中)
  • angular.module().service(['module1.version'], function(version){});你可以有别名。像这样注入依赖项也是一种最佳实践。示例:codepaste.net/5kzfx3
  • 按照您的建议进行注射会给我以下错误:Unknown provider: module1.infoProvider <- module1.info <- myCtrl
  • 这需要更多解释。为什么提供者属于不同的模块时不能有相同的名称?
  • 因为 Angular 不知道要注入什么服务。如果您有 2 个具有相同名称的 2 个服务的模块并且您注入了一个服务,那么 Angular 不知道要注入哪个服务。 Angular DI 适用于名称。它搜索依赖项的名称,而不是源模块。
【解决方案2】:

这是因为 module2 覆盖了 module1 常量。

您可以使用moduleName.version 作为名称,但不能使用相同的名称。

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多