我试图了解工厂是如何运作的,并且已经遇到了障碍。我正在关注第88页左右的this guide。
运行我的代码会导致这些控制台错误。
TypeError:无法读取未定义
的属性'getData'<div ng-app="timeEntry">
<div ng-controller="timeEntryController">
<p class="lead">Factory Test</p>
<p>**** {{testing}}</p>
<p>******** {{testing2}}</p>
</div>
</div>
var timeEntry = angular.module('timeEntry', []);
timeEntry.controller('timeEntryController', ['$scope', function ($scope, loadData) {
$scope.testing = 'test';
$scope.testing2 = loadData.getData();
}]);
timeEntry.factory('loadData', function ($http) {
var test = 'test data';
var factory = {};
factory.getData = function () {
return test;
};
return factory;
});
JS小提琴http://jsfiddle.net/dgdavidson/QPc3j/2/
我确信错误很明显,但我不知道它是什么。
答案 0 :(得分:0)
您需要在声明中添加字符串'loadData':
所以改变这个:
timeEntry.controller('timeEntryController', ['$scope', function ($scope, loadData) {
为:
timeEntry.controller('timeEntryController', ['$scope', 'loadData', function ($scope, loadData) {
您看到的错误是因为Angular正在将undefined
传递到loadData
。当然,undefined
没有属性getData
。
这是一个容易/常见的错误,有些人会跳过手动声明字符串并使用ngMin为它们执行此操作(例如将其添加到您的grunt文件中)。这允许您使用以下样式的声明,而不必确保字符串匹配参数:
timeEntry.controller('timeEntryController', function ($scope, loadData) {