我开始对我的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流程中,我按此顺序使用ngAnnotate
:concat
,ngAnnotate
和最终uglify
我在这里遗漏了什么吗?我的代码可能会发生什么?
我是否需要任何额外的文件来启用$inject
?
我第一次尝试以这种方式构建我的AngularJs。顺便说一句,控制器的功能没有影响(也因为没有注入,只是一个简单的功能和名称定义),当我可以运行应用程序,其余的工作,问题开始时,我尝试使用$注入。
答案 0 :(得分:4)
错误说明了一切:你提供一个字符串作为参数,而它应该是一个函数。这是因为config
阻止没有名字。它必须是
angular
.module('agApp')
.config(ConfigRouter);