AngularJS 控制器在注入工厂时抛出错误
AngularJS controller throwing an error while injecting factory
我是 Angular 的新手,我正在构建我的第一个 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());
});
当我将数据注入控制器时,Angular 抛出一个错误。我该如何克服这个问题?我用谷歌搜索,观看了 YouTube 视频和 CodeSchool,但无法弄清楚为什么会抛出错误。
请注意,当您创建与 []
同名的第二个新模块时,第一个模块将被覆盖。
例如:
你创造
angular.module('portfolioApp',[]).factory('....
angular 将创建一个名为 portfolioApp
的新模块,因为模块名称后有 []
。
然后
angular.module('portfolioApp',[])
.controller('FirstCtrl',....
你尝试用 []
创建一个与之前同名的模块,所以 angular 会用这个模块覆盖第一个模块,所以你之前的模块此时已经不存在了,所以有没有工厂叫 Data
所以只需从第二个模块声明中删除 []
然后 angular 将不会覆盖前一个模块而是 angular 将扩展模块,
angular.module('portfolioApp')
.controller('FirstCtrl', fu...
我是 Angular 的新手,我正在构建我的第一个 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());
});
当我将数据注入控制器时,Angular 抛出一个错误。我该如何克服这个问题?我用谷歌搜索,观看了 YouTube 视频和 CodeSchool,但无法弄清楚为什么会抛出错误。
请注意,当您创建与 []
同名的第二个新模块时,第一个模块将被覆盖。
例如:
你创造
angular.module('portfolioApp',[]).factory('....
angular 将创建一个名为 portfolioApp
的新模块,因为模块名称后有 []
。
然后
angular.module('portfolioApp',[])
.controller('FirstCtrl',....
你尝试用 []
创建一个与之前同名的模块,所以 angular 会用这个模块覆盖第一个模块,所以你之前的模块此时已经不存在了,所以有没有工厂叫 Data
所以只需从第二个模块声明中删除 []
然后 angular 将不会覆盖前一个模块而是 angular 将扩展模块,
angular.module('portfolioApp')
.controller('FirstCtrl', fu...