angularjs [ng:areq] Argument' fn'不是一个函数,得到了字符串

时间:2014-05-12 06:14:45

标签: angularjs

我是角度js的新手。我遇到了以下错误,请帮帮我

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

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";
});

7 个答案:

答案 0 :(得分:31)

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

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

或更好:

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

注释可以让缩小工作正常。您可以在AngularJS docs https://docs.angularjs.org/tutorial/step_05上阅读更多相关信息。 请注意,需要在整个应用程序中完成此练习才能正常工作。

答案 1 :(得分:13)

虽然与此问题的上下文没有直接关系,但此错误消息也可能由解析块返回除函数之外的其他内容引起,如下所示:

$stateProvider.state('mystate', {
    url: "/myurl",
    templateUrl: "mytemplate.html",
    controller: "MyController",
    resolve: {
        authenticatedUser: securityAuthorizationProvider.requireAuthenticatedUser
    }
});

如果securityAuthorizationProvider.requireAuthenticatedUser恰好未定义,则可能会出现此错误。

答案 2 :(得分:3)

我知道这是一篇较旧的帖子,但我认为我会通过这个确切的错误为我的代码做出错误。我正以这种方式向我的控制器注入一个服务:

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

而不是:

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

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

答案 3 :(得分:2)

问题是在数组外定义工厂依赖。最有可能的是缩小也是一个问题。

//Error in this
  angular
    .module('mymodule').factory('myFactory', 'thisconstant', function (thisconstant) {

});

修复
//correct code
  angular
    .module('mymodule').factory('myFactory', ['thisconstant', function (thisconstant) {

}]);

答案 4 :(得分:1)

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

这会导致错误:

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

我应该这样做:

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

或者这个:

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

更多关于匿名函数和命名函数here

之间的区别

答案 5 :(得分:1)

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

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

并使用像这样的路由,

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

只需尝试一次这些步骤。

答案 6 :(得分:0)

由于这里添加了各种用例,所以我想我也要添加我的。重新格式化功能服务时出现此错误

angular
.app('myApp')
.service('MyService', function (){
  // do something
return MyService;
})

放入一个类对象:

export default class MyService { ... }

angular
    .app('myApp')
    .service('MyService', MyService);

我的问题是我的服务在函数结尾处返回了自己,我需要添加一个类函数,这样做:

export default class MyService {
  constructor(){
  // doing something
  }

  get() {
  return MyService;
  }
}

为我解决了这个问题。 :)