Javascript AngularJS:将数据从工厂注入控制器
我试图获取一些数据,然后将其传递给控制器进行进一步处理。我已经设置了一个工厂来获取数据,但是在将数据传递给控制器并使其工作时遇到了问题。下面是我正在处理的案例Javascript AngularJS:将数据从工厂注入控制器,javascript,angularjs,angularjs-controller,angularjs-factory,Javascript,Angularjs,Angularjs Controller,Angularjs Factory,我试图获取一些数据,然后将其传递给控制器进行进一步处理。我已经设置了一个工厂来获取数据,但是在将数据传递给控制器并使其工作时遇到了问题。下面是我正在处理的案例 var app = angular.module("contactApp",[]); app.factory('listData',function($http){ return{ getData: function(onSuccess,onFailure,itemID){ $
var app = angular.module("contactApp",[]);
app.factory('listData',function($http){
return{
getData: function(onSuccess,onFailure,itemID){
$http.get("/_api/web/lists/getbytitle('Consultant%20Profile')/items?$filter=ID%20eq%20"+itemID).success(onSuccess).error(onFailure);
}
};
});
app.controller('ContactController', function(listData,$scope){
//setTimeout(function(){console.log(Data)},2000);
console.log("Controller called. Hello");
listData.getData(successFunction,failFunction,curItemId);
successFunction = function(data){
$scope.resData = data;
console.log("Success - ", data);
}
failFunction - function(data){
console.log("Didn't work - ", data);
}
});
这给了我以下的错误
未定义successFunction
不知道我做错了什么,任何意见都将不胜感激
编辑:
向下移动函数效果很好,但异步调用失败了。我改用$ajax,它工作得很好,但是$http由于某些原因无法工作
app.factory('listData',function($http){
return{
getData: function(onSuccess,onFailure,itemID){
//$http.get("/_api/web/lists/getbytitle('Consultant%20Profile')/items?$filter=ID%20eq%20156").success(onSuccess).error(onFailure);
$.ajax({
url:"/_api/web/lists/getbytitle('Consultant%20Profile')/items?$filter=ID%20eq%20"+itemID,
headers: {"accept": "application/json; odata=verbose"},
success: onSuccess,
error: onFailure
});
}
};
});
仅供参考,数据来自SharePoint列表,但这不重要。我会继续挖掘,如果我有语法错误找不到,请告诉我
我真的很感谢你们的帮助
编辑2:
好的,这个问题是无关的。我发现了问题,SharePoint使用odata,因此我必须传递标题:
app.factory('listData',function($http){
return{
getData: function(onSuccess,onFailure,itemID){
$http(
{
method: "GET",
headers: {"accept": "application/json; odata=verbose"},
url: "/_api/web/lists/getbytitle('Consultant%20Profile')/items?$filter=ID%20eq%20"+itemID
}
).success(onSuccess).error(onFailure);
}
};
});
你们太棒了 正如Daniel A.White所说,在调用函数之前先声明它们
var app = angular.module("contactApp",[]);
app.factory('listData',function($http){
return{
getData: function(onSuccess,onFailure,itemID){
$http.get("/_api/web/lists/getbytitle('Consultant%20Profile')/items?$filter=ID%20eq%20"+itemID).success(onSuccess).error(onFailure);
}
};
});
app.controller('ContactController', function(listData,$scope){
//setTimeout(function(){console.log(Data)},2000);
console.log("Controller called. Hello");
var successFunction = function(data){
$scope.resData = data;
console.log("Success - ", data);
}
var failFunction - function(data){
console.log("Didn't work - ", data);
}
//Now your functions are actually defined.
listData.getData(successFunction,failFunction,curItemId);
});
您不必使用var
来声明函数,因为JavaScript仍然可以理解,但使用var
使其成为local
变量,而不使用var
将其定义为global
我相信这会有所帮助。在调用
getData
之前移动函数。使用var
预先设置successFunction
和failFunction
,然后javascript作用域应该将其选中。这也将防止污染您的全局窗口对象,因为它现在正在启动,但我正在进行的$http调用有问题。我将更新我的问题以包含此内容。