2015-03-31 77 views
1

我是Angular的新手,我正在构建我的第一个角度应用程序。我有我的投资组合网页,我想从外部来源获取数据并将其提供给所有控制器。AngularJS控制器在注入工厂时抛出错误

这是我对HTML:

<!DOCTYPE html> 
<html ng-app="portfolioApp"> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>Mithun Mathew</title> 
    <link rel='shortcut icon' href='images/favicon.ico' type='image/x-icon'/> 
    <link rel="stylesheet" href="styles/style.css" type="text/css"> 

    <!-- Angular Import--> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 

    <!-- Angular Main Module --> 
    <script type="text/javascript" src="portfolioApp.js"></script> 

    <!-- Angular Controllers --> 
    <script type="text/javascript" src="controllers/dataRetrieve.js"></script> 



</head> 
<body ng-controller="FirstCtrl"> 

<me></me> 

</body> 
</html> 

我的js文件: portfolioApp.js

angular.module('portfolioApp',[]) 
.factory('Data', ['$scope', '$http', function DataFactory ($scope, $http) { 
    var dataCtrl = this; 

    $http({ 
     method: 'GET', 
     url: 'http://someurl/' 
    }).success(function (data) { 
     dataCtrl.data = data; 
     console.log(data); 
    }).error(function (error) { 
     console.log("Hey! Something went wrong while loading. :("); 
    }); 


    return function(){ 
     return dataCtrl.data; 
    } 
}]); 

dataRetrieve.js

angular.module('portfolioApp',[]) 
    .controller('FirstCtrl', function(Data) { 
     console.log('Hello'); 
     console.log(Data()); 
    }); 

角抛出我的错误时我将数据注入控制器。我如何克服这个问题?我搜索了一下,观看了YouTube视频和CodeSchool,但无法弄清楚为什么会出现错误。

+0

什么错误?我没有看到一个 – Phil 2015-03-31 04:58:06

+0

菲尔,我无法正确使用工厂。我认为有一个问题,我将数据工厂注入FirstCtrl – Matt 2015-04-01 03:03:13

回答

2

请注意,当您使用[]创建第二个具有相同名称的新模块时,第一个模块将会覆盖。

为前:

创建

angular.module('portfolioApp',[]).factory('.... 

角度将创建一个因为有[]模块名称后调用portfolioApp新的模块。

然后

angular.module('portfolioApp',[]) 
.controller('FirstCtrl',.... 

尝试与之前创建具有相同名称的模块[]这样的角度将覆盖这一个第一模块,让你的前一个模块是没有更多的在这个时候,所以没有工厂称为Data

所以简单地从第二模块声明然后除去角将[]不会覆盖以前的模块,而不是角意愿延伸模块,

angular.module('portfolioApp') 
    .controller('FirstCtrl', fu... 
+0

感谢您的快速响应。我试过了,但仍然无法使用console.log(Data())获取数据。 我在将数据注入控制器时出现错误。我是否缺少别的东西?感谢您的帮助提前。 – Matt 2015-04-01 02:59:04

+0

从工厂中删除'$ scope'注入。 :)这里是一个演示。用控制台检查http://plnkr.co/edit/hdNJWe237IgDPBZ4YKab?p=preview – 2015-04-01 04:00:47