$ http.post在控制台中返回错误 - 未定义

时间:2014-09-11 18:54:27

标签: javascript node.js angularjs post

我是棱角分明的新人。我使用控制器从工厂中获取数据,该工厂已经填充了连接到REST api的$ http.get:

videoModule.factory('myFactory', function($http){   
    var factory = {};
    factory.getStuff = function(success, error) {

       return $http({method: 'GET', url: '/api/backup'});           
    };
    factory.postStuff = function(stuff){

    };
    return factory;
    });

这是我的控制器代码:

app.controller('myController', function($scope, $http, myFactory){
        myFactory.getStuff().success(function(data, status, headers, config){
            $scope.stuff = data;
            console.log(data);

            $scope.selectedStuff = function($scope, $http){
                var selectedFile = data[0].File_Name;
                var selectedDir = data[0].File_SubDir;

                var pack = selectedDir + "/" + selectedFile;
                console.log(pack);

                var result = { File_Location: pack };
                console.log(result);

                $http.post('api/test', result).success(function(data, status, headers){
                    console.log("Selected Video Sent to /api/test");
            });
            };
        }).
        error(function(data, status, headers, config) {
            console.log("ERROR", data, status);
        });
    });

.success(function())中的前两行工作正常 - 它们加载了我可以用来绑定到我的HTML的JS对象。下一大块代码完美无缺。我的观点有一个" ng-click = selectedStuff()"捆绑。单击该元素时,模块会将结果,一个JS对象{File_Location:pack}记录到我的控制台。

然而,我在接下来的三行中遇到了麻烦。当我尝试将此对象POST到/ api / test时,我在开发工具中收到错误消息:

TypeError: Cannot read property 'post' of undefined at k.$scope.selectedVideo. 

我无法弄清楚为什么$ http会以未定义的方式出现。有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

那是因为$ scope.selectedStuff期待两个参数($scope, $http) 和 在ng-click=selectedStuff()中,你没有发送任何参数,在函数中将$ http作为未定义。

您可以从函数中删除参数,因为它们可以从全局范围中获取。

$scope.selectedStuff = function(){
            var selectedFile = data[0].File_Name;
            var selectedDir = data[0].File_SubDir;

            var pack = selectedDir + "/" + selectedFile;
            console.log(pack);

            var result = { File_Location: pack };
            console.log(result);

            $http.post('api/test', result).success(function(data, status, headers){
                console.log("Selected Video Sent to /api/test");
        });
        };

另外,我建议你考虑将$scope.selectedStuff定义带到myFactory.getStuff()成功回调之外。