Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:将数据从工厂注入控制器_Javascript_Angularjs_Angularjs Controller_Angularjs Factory - Fatal编程技术网

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调用有问题。我将更新我的问题以包含此内容。