AngularJS控制器在注入工厂时抛出错误

时间:2015-03-31 04:44:45

标签: javascript angularjs controller

我是Angular的新手,我正在构建我的第一个角度应用。我有我的投资组合网页,我想从外部源获取数据,并将其提供给所有控制器。

这就是我对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());
    });

当我将Data注入控制器时,Angular会抛出一个错误。我如何通过这个?我用谷歌搜索,观看了YouTube视频和CodeSchool,并且无法弄清楚错误被抛出的原因。

1 个答案:

答案 0 :(得分:2)

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

代表:

你创建

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

angular将创建一个名为portfolioApp的新模块,因为模块名称后面有[]

然后

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

您尝试使用[]创建一个与之前名称相同的模块,因此angular将覆盖第一个模块,因此您之前的模块不再是,因此没有名为{{的工厂1}}

所以只需从第二个模块声明中删除Data,然后angular将不会覆盖前一个模块,而angular会扩展模块,

[]