我是棱角分明的新人。我使用控制器从工厂中获取数据,该工厂已经填充了连接到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会以未定义的方式出现。有没有人遇到过这个问题?
答案 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()成功回调之外。