Javascript 通过角度工厂将数据馈送至控制器

Javascript 通过角度工厂将数据馈送至控制器,javascript,html,angularjs,highcharts,Javascript,Html,Angularjs,Highcharts,我试图通过angular factory函数检索json数据,并将数据提供给控制器以创建一个图表(highchart)对象。但是,这给了我一个“参数‘工厂函数名’不是函数,未定义”错误。我的javascript包含一个角度模块,其中包含一个控制器和工厂(如上所述),以及一个呈现图表的指令 我的javascript是: var-app=angular.module('charts',[]); 应用指令('highchart',函数(){ 返回{ 限制:'E', 模板:“”, 替换:正确, 链接:函

我试图通过angular factory函数检索json数据,并将数据提供给控制器以创建一个图表(highchart)对象。但是,这给了我一个“参数‘工厂函数名’不是函数,未定义”错误。我的javascript包含一个角度模块,其中包含一个控制器和工厂(如上所述),以及一个呈现图表的指令

我的javascript是:

var-app=angular.module('charts',[]);
应用指令('highchart',函数(){
返回{
限制:'E',
模板:“”,
替换:正确,
链接:函数(范围、元素、属性){
范围:$watch(函数(){
返回属性表;
},函数(){
如果(!属性图表)返回;
var charts=JSON.parse(attrs.chart);
$(元素[0])。高图(图表);
});
}
};
});
app.factory('GetOverSpeedWorstData',函数($scope,$http){
$http.get('http://localhost:5155/overspeedworst/OverSpeedworst)。成功(功能(数据、状态){
$scope.score=[];
对于(变量i=0;i
我的HTML是:


仪表板应用程序
超速(最差)分数
超速(最佳)分数
车辆里程
维修报告
关于为什么会发生这种情况有什么建议吗?此外,如果我在控制器中检索数据(相关代码也被粘贴),那么这将运行得非常好

var-app=angular.module('charts',[]);
应用指令('highchart',函数(){
返回{
限制:'E',
模板:“”,
替换:正确,
链接:函数(范围、元素、属性){
范围:$watch(函数(){
返回属性表;
},函数(){
如果(!属性图表)返回;
var charts=JSON.parse(attrs.chart);
$(元素[0])。高图(图表);
});
}
};
});
app.controller('Ctrl',函数($scope,$http,$timeout){
$http.get('http://localhost:5155/overspeedworst/OverSpeedworst)。成功(功能(数据、状态){
var得分=[];
对于(变量i=0;i
要添加更多内容,我的json数据的格式如下:

[{
“姓名”:“A”,
“分数”:900
}, {
“名称”:“B”,
“分数”:846
}, {
“姓名”:“C”,
“分数”:757
}, {
“名称”:“D”,
“分数”:321
}, {
“名称”:“E”,
“分数”:222
}]

您的问题不在于控制器,而在于您使用工厂定义服务的方式:

您可能应该这样做:

app.factory('GetOverSpeedWorstData', function ($scope,$http) {
    var r;
    $http.get('http://localhost:5155/overspeedworst/OverSpeedworst').success(function (data, status) {
        stuff, like r = data
    }).error("error message");
     error stuff    
    });

    return {service methods here};
否则,你的工厂不会考虑任何因素。它必须返回某些内容。

1)定义服务:

app.factory('GetOverSpeedWorstData',
    function ($resource) {
        var apiPath = 'http://localhost:5155/overspeedworst/OverSpeedworst';
        return $resource(apiPath, {}, {
           'query':  {method:'GET', isArray:true}               
        });
});
2) 在控制器中执行此操作

app.controller('Ctrl', function ($scope, $http, $timeout, GetOverSpeedWorstData) {

     $scope.list = new GetOverSpeedWorstData();

     $scope.list.$query(success, error); // or use promise

     function success (data) {
        //data manipulation
     };

     function error (data) {
       //error handling
     }; 
});

3) 跳舞吧,就像没人在看你一样

你好,爱德华,谢谢你的及时回复。我尝试你的建议已经有一段时间了,但还是没能解决这个问题。如果我在控制器中获取数据并进行操作,它会工作,但是如果我通过工厂获取数据并在控制器中进行操作,它不会工作。请你重新审视这个问题并提出建议。请找到这两种方法的Plunker链接,(工作正常)(不工作)您有很多错误。你没检查firebug的控制台吗?我更新了它,当您在控制器中查找数据时,您需要使用承诺来确保数据已解析。读一下这个@EduardGamonal你能再解释一下吗。。。现在我也陷入了同样的问题……嘿,你是怎么使用工厂服务的??