angularjs[ng:areq]参数”fn”不是函数,得到字符串

angularjs [ng:areq] Argument 'fn' is not a function, got string

我对Angular JS不熟悉。我有以下错误,请帮助我。

[ng:areq]参数"fn"不是函数,而是字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var app = angular.module('demo',[]);


app.config('$routeProvider',function($routeProvider){

    $routeProvider.when('/add',{
        templateUrl:'demo/add.html',
        controller:'addcontroller'
    }).
    when('/order',{
        templateUrl:'demo/order.html',
        controller:'ordercontroller'
    });

});

app.controller('addcontroller',function($scope){
    $scope.message="order";
});
app.controller('ordercontroller',function($scope){
    $scope.message="order";
});


我认为错误在配置块中,应该是:

1
2
3
app.config(function($routeProvider){
  // routeProvider config
});

或更好:

1
2
3
app.config(['$routeProvider', function($routeProvider){
  // routeProvider config, allows minification
}]);

这些注释是为了使缩小正确地工作。您可以在AngularJS文档https://docs.angularJS.org/tutorial/step_05上了解更多信息。请注意,此实践需要在整个应用程序中完成才能正常工作。


虽然与此问题的上下文不直接相关,但此错误消息也可能是由返回函数以外的内容的解析块引起的,如:

1
2
3
4
5
6
7
8
$stateProvider.state('mystate', {
    url:"/myurl",
    templateUrl:"mytemplate.html",
    controller:"MyController",
    resolve: {
        authenticatedUser: securityAuthorizationProvider.requireAuthenticatedUser
    }
});

如果securityAuthorizationProvider.requireAuthenticatedUser碰巧是未定义的,您可以得到这个错误。


我知道这是一篇老文章,但我认为我会用这个确切的错误贡献出我的代码的错误。我是这样给我的控制器注入服务的:

1
theApp.directive('theDirective', 'myService', ['$http', function ($http, myService) {}]);

而不是这个:

1
theApp.directive('theDirective', ['$http', 'myService', function ($http, myService) {}]);

请注意,我的服务包含在内联数组注释之外!对我来说,这是一个愚蠢的举动,花费了我太多时间。


因为问题是在数组外部定义工厂依赖关系。很可能缩小也是一个问题。

1
2
3
4
5
//Error in this
  angular
    .module('mymodule').factory('myFactory', 'thisconstant', function (thisconstant) {

});

这通过固定

1
2
3
4
5
//correct code
  angular
    .module('mymodule').factory('myFactory', ['thisconstant', function (thisconstant) {

}]);

在第一行,你需要这样使用,

1
var app = angular.module('demo', ['ngRoute']);

使用这种路由方式,

1
2
3
4
$routeProvider.when('/add').then({
        templateUrl:'demo/add.html',
        controller:'addcontroller'
    });

只需尝试这些步骤一次。


我误解了在JavaScript中处理匿名函数和命名函数的方式,从而得到了这个错误。

这会导致错误:

1
2
3
4
angular.module("app").factory("myDataService", ['$resource', myDataService]);
var myDataService = function($resource) {
    return $resource('/url');
}

我应该这样做:

1
2
3
4
var myDataService = function($resource) {
    return $resource('/url');
}
angular.module("app").factory("myDataService", ['$resource', myDataService]);

或者:

1
2
3
4
angular.module("app").factory("myDataService", ['$resource', myDataService]);
function myDataService($resource) {
    return $resource('/url');
}

更多关于匿名函数和命名函数之间的区别