我在哪里可以初始化模块范围的变量?

mpe*_*pen 14 angularjs

我正在尝试做这样的事情:

angular.module('MyModule', ['ui'])
    .config(function($rootScope) {
        $rootScope.Gender = {
            'M': 'Male',
            'F': 'Female',
            'U': 'Unknown',
        };
    })
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

未捕获错误:未知提供者:来自MyModule的$ rootScope

如果我无法访问$rootScope我的模块配置,那么初始化模块范围变量的适当位置在哪里?

Jos*_*ler 25

$rootScope您也可以使用角度常量或值来代替使用:

angular.module('MyModule', ['ui']).constant( 'Gender', {
  'M': 'Male',
  'F': 'Female',
  'U': 'Unknown',
});
Run Code Online (Sandbox Code Playgroud)

永远不能改变,而值可以改变.您可以在任何需要的地方注入它:

app.controller( 'MainController', function ( $scope, Gender ) {
  console.log( Gender.M );
});
Run Code Online (Sandbox Code Playgroud)

在我看来.对于全站点变量而言,这似乎比使用更"合适" $rootScope.

  • 但是我可以在视图中访问常量吗?我不想要注射它. (3认同)

pko*_*rce 8

你不能将服务(这里是$ rootScope)注入配置块.在配置阶段只能注入常量和提供程序.

在您的情况下,正确的解决方案是使用运行块.只需更改配置即可运行,事情应该按预期工作.

  • 我认为$ rootScope不是让你的应用程序模块化并以某种方式打破SRP规则的好方法 (3认同)