我正在尝试一个AddressBook Angular应用程序的简单示例。我有一个工厂,它返回一个记录数组,它使用List控制器
显示在列表视图中angular.module('abModule', ['ngRoute'])
.factory('AddressBook', function() {
var address_book = [
{
"id": 1,
"first_name": "John",
"last_name": "Doe",
"age": 29
},
{
"id": 2,
"first_name": "Anna",
"last_name": " Smith",
"age": 24
},
{
"id": 3,
"first_name": "Peter",
"last_name": " Jones",
"age": 39
}
];
alert('inside factory function');
return {
get: function() {
return address_book
}
};
})
.config(function($routeProvider) {
$routeProvider
.when('/', {
controller:'list_controller',
templateUrl:'list.html'
})
.when('/add', {
controller:'add_controller',
templateUrl:'add.html'
})
.otherwise({
redirectTo:'/'
});
})
.controller('list_controller',['$scope', function ($scope, AddressBook) {
$scope.address_book = AddressBook;
}])
.controller('add_controller',['$scope', function ($scope,AddressBook) {
//$scope.entry = {};
$scope.save = function() {
AddressBook.set(
{
"id": $scope.address_book.length +1,
"first_name":$scope.entry.firt_name,
"last_name":$scope.entry.last_name,
"age":$scope.entry.age
}
);
};
}]);
这里' AddressBook'在list &controller'内部始终未定义。知道我哪里错了吗?非常感谢任何帮助。
答案 0 :(得分:7)
您没有为您的DI注释AddressBook
.controller('list_controller',['$scope', function ($scope, AddressBook) {
$scope.address_book = AddressBook;
}])
应该是:
.controller('list_controller',['$scope', 'AddressBook', function ($scope, AddressBook) {
$scope.address_book = AddressBook;
}])
另一个控制器相同。
答案 1 :(得分:2)
另一种方法是使用$ inject声明你的依赖项,它们的使用顺序与你的函数的参数相同,如下所示。它有助于在代码缩小后注入正确的服务。
var App = angular.module('myApp',[]);
App.controller('myCtrl',myCtrl);
//inject your dependencies;
myCtrl.$inject = ["$scope", "AddressBook","anotherService"] //
function myCtrl($scope,AddressBook,anotherService){
.....
}
答案 2 :(得分:2)
在工厂变量中始终未定义的另一个可能原因是声明的依赖关系到函数参数列表的映射不正确。 E.g:
var loginCtrl = loginModule.controller("loginController",
['$scope', '$window', 'notificationMessage',
function ($scope, $window, serverDataConvertor, notificationMessage) {
// notificationMessage is undefined because serverDataConvertor factory is not a declared dependency
// controller logic comes here
}
不幸的是,Angular不会发出任何警告或错误,这可能非常令人沮丧,尤其是当依赖列表很大时。