我正在学习AngularJS:
https://docs.angularjs.org/tutorial/step_13
但是使用我自己的例子。 13步后Chrome控制台给我一个错误
Book.get is not a function
在此控制器中:
angular.module('bookDetail').component(
'bookDetail',
{
templateUrl : 'book-detail/book-detail.template.html',
controller : [ '$routeParams', 'Book',
function BookDetailController(Book, $routeParams) {
var self = this;
self.book = Book.get({
bookId : $routeParams.bookId
}, function(book) {
self.setTitle(book.title);
});
self.setTitle = function setTitle(title) {
self.mainTitle = title;
}
} ]
});
有效的控制器:
angular.module('bookList').component('bookList', {
templateUrl : 'book-list/book-list.template.html',
controller : [ 'Book', function BookListController(Book) {
this.books = Book.query();
} ]
});
和服务:
angular.module('core.book').factory('Book', [ '$resource', function($resource) {
return $resource('books/:bookId.json', {}, {
query : {
method : 'GET',
params : {
bookId : 'books'
},
isArray : true
}
});
} ]);
我不知道这里有什么问题。
答案 0 :(得分:1)
交换您的依赖注入。
controller : [ '$routeParams', 'Book',
function BookDetailController(Book, $routeParams) {
要传递给函数的字符串参数数组按位置按顺序匹配,而不是按名称匹配。变量名可以是任意的。因此,在这种情况下,您正在使用$routeParams
的实例并将其分配给Book
变量,反之亦然。
切换注射顺序应该可以解决问题:
controller : [ '$routeParams', 'Book',
function BookDetailController($routeParams, Book) {