这里我们进行 Book 的“类”方法调用。在方法的使用上,根据官方文档:


      我们这里是第二种形式,即类方法的非 GET 请求。我们给的参数会作为 传递。如果我们需要 GET 参数,并且还需要一个错误回调,那么:

      1. var book = Book.read({get: 'haha'}, {id: '123'},
        function(response){
        console.log(response);
        },
        function(error){
        console.log(error);
        }
        );


      调用之后,我们会立即得到的 book ,它是 Book 类的一个实例。这里所谓的实例,实际上就是先把所有的 action 加一个 $ 前缀放到一个空对象里,然后把发出的参数填充进去。等请求返回了,把除 action 以外的成员删除掉,再把请求返回的数据填充到这个对象当中。所以,如果我们这样:


      就能看到 book 实例的变化过程了。



        可以看到,在请求回调之后, 这个实例的成员已经被响应内容填充了。但是这里有一个问题,我们返回的数据,并不适合一个 book 实例。格式先不说,它把 titleauthor 这些信息都丢了(因为响应只返回了 )。



        如果仅仅是格式问题,我们可以通过配置 $http 服务来解决( AJAX 请求都要使用 $http 服务的):

        1. $http.defaults.transformResponse = function(data){return angular.fromJson(data).obj};


        当然,我们也可以自己来解决一下丢信息的问题:


        不过,始终会有一些不方便了。比较正统的方式应该是调节服务器端的响应,让服务器端也具有和前端一样的实例概念,返回的是完整的实例信息。即使这样,你也还要考虑格式的事。



          首先解决一个疑问,如果一个实例是进行一个 GET 的调用会怎么样?没有任何问题,这当然没有任何问题的,形式和上面一样。



          如何实例是做 POST 请求的话,从形式上看,我们无法控制请求的 postData ?是的,所有的 POST 请求,其 postData 都会被实例数据自动填充,形式上我们只能控制 params



          所以,如果是在做修改调用的话:

          1. book.$update({title: '新标题', author: '测试作者'}, function(response){
            console.log(book);
            });


          这样是没有意义的并且错误的。因为要修改的数据只是作为 GET 参数传递了,而 传递的数据就是当前实例的数据,并没有任何修改。



          显然,这种情况下,回调都可以省了: