REST获取单项 - 获取不是一个功能

时间:2016-12-21 10:02:23

标签: angularjs

我正在学习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
    }
});
} ]);

我不知道这里有什么问题。

1 个答案:

答案 0 :(得分:1)

交换您的依赖注入。

  controller : [ '$routeParams', 'Book',
            function BookDetailController(Book, $routeParams) {

要传递给函数的字符串参数数组按位置按顺序匹配,而不是按名称匹配。变量名可以是任意的。因此,在这种情况下,您正在使用$routeParams的实例并将其分配给Book变量,反之亦然。

切换注射顺序应该可以解决问题:

  controller : [ '$routeParams', 'Book',
            function BookDetailController($routeParams, Book) {