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 } }); |
如果
我知道这是一篇老文章,但我认为我会用这个确切的错误贡献出我的代码的错误。我是这样给我的控制器注入服务的:
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'); } |
更多关于匿名函数和命名函数之间的区别