我一直得到TypeError:undefined不是一个函数

时间:2014-08-13 01:41:13

标签: javascript node.js angularjs mean-stack

在MEAN堆栈应用程序中运行以下代码时,我一直收到上述错误:

$scope.completelesson = function(lessonindex, type) {
        //a variable that will be appended to 'level' in order to access the level   property of the user
        var x = lessonindex + 1;
        var level = 'level' + x;
        var toupdate = {
            level: level,
            type: type,
        };
        console.log(toupdate);
        $http({method: 'POST', url: '/users/updatelevel'}).success(function(response) {
            $location.path('/dashboard');
        });
    };

这里是完整的错误消息:

TypeError: undefined is not a function
at Scope.$scope.completelesson (http://localhost:3000/modules/dashboard/controllers/lesson.client.controller.js:64:13)
at http://localhost:3000/lib/angular/angular.js:10795:21
at http://localhost:3000/lib/angular-touch/angular-touch.js:441:9
at Scope.$eval (http://localhost:3000/lib/angular/angular.js:12632:28)
at Scope.$apply (http://localhost:3000/lib/angular/angular.js:12730:23)
at HTMLButtonElement.<anonymous> (http://localhost:3000/lib/angular-touch/angular-touch.js:440:13)
at http://localhost:3000/lib/angular/angular.js:2843:10
at forEach (http://localhost:3000/lib/angular/angular.js:325:18)
at HTMLButtonElement.eventHandler (http://localhost:3000/lib/angular/angular.js:2842:5) 

奇怪的是,这段代码以前曾经工作过 - 突然之间停止了。该函数一直运行到$ http。我知道这是因为console.log()记录了正确的对象,但$ http请求永远不会记录到节点控制台。

我的AngularJS文件是最新的(1.2.22)。

知道可能导致此错误消息的原因以及如何修复它?

感谢您的帮助。

编辑:

以下是我的控制器定义的代码:

angular.module('dashboard').controller('lessonController', ['$scope', 'Authentication', '$location', 'lesson', '$sce', '$http',
    function($scope, Authentication, $location, lesson, $sce, $state, $http) {

2 个答案:

答案 0 :(得分:1)

@PSL解决了这个问题。

我的控制器定义中存在问题。我注入了比构造函数中的参数数量更多的依赖项。这就是控制器在$ http之前运行的原因,因为我注入$ state应该注入$ http。

将我的控制器定义更改为以下代码修复了我的问题:

angular.module('dashboard').controller('lessonController', ['$scope', 'Authentication', '$location', 'lesson', '$sce', '$http',
    function($scope, Authentication, $location, lesson, $sce, $http) {

感谢所有人的帮助!

答案 1 :(得分:0)

尝试使用

$http({method: 'POST', url: '/users/updatelevel', data: {}}).success(function(response) {
            $location.path('/dashboard');

$http.post('/users/updatelevel', {})success(function(response) {
            $location.path('/dashboard');