使用$ inject的Angularjs不起作用

时间:2015-11-12 02:41:31

标签: angularjs

我开始对我的AngularJs代码进行了大量更改以改进它。我正在寻找this reference并发现它非常有趣,所以我正在更改我的代码以遵循这些指南。

当我进入溃败配置时,我无法使其正常工作。 如果我像下面的代码一样使用.config,那么一切正常。

angular
.module('agApp')
.config(
['$stateProvider', '$urlRouterProvider', '$locationProvider', 
function ($stateProvider, $urlRouterProvider, $locationProvider) {

    $urlRouterProvider.when("/", "/First");
    $urlRouterProvider.when("", "/First");
    $urlRouterProvider.otherwise("/First");

    $stateProvider
        .state('first', {
            url: "/First",
            views: {
                "main": {
                    templateUrl: "app/component/first.html",
                    controller: 'FirstController',
                    controllerAs: 'vm'
                }
            }
        })
        .state('second', {
            url: "/Second",
            views: {
                "main": {
                    controller: 'SecondController',
                    controllerAs: 'vm',
                    templateUrl: "app/component/second.html"
                }
            }
        })
}]);

但是当我尝试使用指南中推荐的代码时,就像这样:

angular
.module('agApp')
.config('ConfigRouter', ConfigRouter);

/* @ngInject */
function ConfigRouter($locationProvider,$stateProvider,$urlRouterProvider) {

    $urlRouterProvider.when("/", "/First");
    $urlRouterProvider.when("", "/First");
    $urlRouterProvider.otherwise("/First");

    $stateProvider
        .state('first', {
            url: "/First",
            views: {
                "main": {
                    templateUrl: "app/component/first.html",
                    controller: 'FirstController',
                    controllerAs: 'vm'
                }
            }
        })
        .state('second', {
            url: "/Second",
            views: {
                "main": {
                    controller: 'SecondController',
                    controllerAs: 'vm',
                    templateUrl: "app/component/second.html"
                }
            }
        })
}

然后它停止工作,我不断收到此错误:

  

由于以下原因无法实例化模块agApp:错误:[ng:areq]
  争论' fn'不是函数,有字符串

我要注意正确的注射(至少,我认为我做过),因为输出缩小的代码看起来像这样:

function ConfigRouter(a,b,c){c.when( [.... rest of the code...]  ),ConfigRouter.$inject=["$locationProvider","$stateProvider","$urlRouterProvider"],

在uglify流程中,我按此顺序使用ngAnnotateconcatngAnnotate和最终uglify

我在这里遗漏了什么吗?我的代码可能会发生什么?
我是否需要任何额外的文件来启用$inject

我第一次尝试以这种方式构建我的AngularJs。顺便说一句,控制器的功能没有影响(也因为没有注入,只是一个简单的功能和名称定义),当我可以运行应用程序,其余的工作,问题开始时,我尝试使用$注入。

1 个答案:

答案 0 :(得分:4)

错误说明了一切:你提供一个字符串作为参数,而它应该是一个函数。这是因为config阻止没有名字。它必须是

angular
.module('agApp')
.config(ConfigRouter);