我是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,并且无法弄清楚错误被抛出的原因。
答案 0 :(得分:2)
请注意,当您使用[]
创建第二个具有相同名称的新模块时,第一个模块将覆盖。
代表:
你创建
angular.module('portfolioApp',[]).factory('....
angular将创建一个名为portfolioApp
的新模块,因为模块名称后面有[]
。
然后
angular.module('portfolioApp',[])
.controller('FirstCtrl',....
您尝试使用[]
创建一个与之前名称相同的模块,因此angular将覆盖第一个模块,因此您之前的模块不再是,因此没有名为{{的工厂1}}
所以只需从第二个模块声明中删除Data
,然后angular将不会覆盖前一个模块,而angular会扩展模块,
[]