如何使用参数

时间:2016-09-10 17:29:21

标签: javascript angularjs json rest

我正在阅读角色教程 STEP 13 REST and Custom Services ,但不确定是否正确理解。

这里创建一个工厂来封装$http。聪明的部分是,有一个文件phones/phones.json包含电话列表,文件包含phones/<phoneId>.json,用于显示每部电话的详细信息。

angular.
  module('core.phone').
  factory('Phone', ['$resource',
    function($resource) {
      return $resource('phones/:phoneId.json', {}, {
        query: {
          method: 'GET',
          params: {phoneId: 'phones'},
          isArray: true
        }
      });
    }
  ]);

因此,当他想要获得完整的手机列表时,使用Phone.query()是有意义的,因为工厂调用Phone并且内部有一些名为query:的内容(该标记如何被称为?方法?功能?)。由于参数I 猜测 没有任何内容,phoneIdphones获取默认值GET声明。

angular.
  module('phoneList').
  component('phoneList', {
    templateUrl: 'phone-list/phone-list.template.html',
    controller: ['Phone',
      function PhoneListController(Phone) {
        this.phones = Phone.query();
        this.orderProp = 'age';
      }
    ]
  });

但是现在最后一部分并不知道它是如何运作的。我理解从phone_id获取$routeParams。但是Phones工厂现在如何拥有get()函数以及为什么在query()不需要回调函数时

angular.
  module('phoneDetail').
  component('phoneDetail', {
    templateUrl: 'phone-detail/phone-detail.template.html',
    controller: ['$routeParams', 'Phone',
      function PhoneDetailController($routeParams, Phone) {
        var self = this;
        self.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
          self.setImage(phone.images[0]);
        });    
      }
    ]
  });

所以我的三个问题是:

  • 如何使用query

  • 的默认参数
  • 手机如何拥有get()以及如何接收参数

  • get()

  • 时,为什么query()需要回调函数

1 个答案:

答案 0 :(得分:1)

  

如何处理查询的默认参数?

e.g。

var Phones =  $resource('phones/:phoneId.json', {phoneId:'@myPhoneId'}

如果我进行查询Phones.query({phoneId:12345}); 然后,角度将HTTP#GET调用网址phones/12345.json。 这里angular知道,它需要采用默认参数phoneId值 通过在调用get资源方法时传递的对象列表进行映射。{phoneId:12345}。 因此,您可以使用:paramName指定defualt参数。

url和hash map对象中的参数名必须相同(在本例中为phoneId

  

手机如何获得get()以及如何接收参数?

资源对象具有默认的资源操作集。如果在创建资源对象时定义,则还具有自定义操作。  默认操作:

1. get    //call $http#GET method
2. save   //call $http#POST method
3. query  //call $http#GET  method
4. remove //call $http#DELETE method
5. delete //call $http#DELETE method
  

为什么get()在query()没有时需要回调函数?

您可以在没有回拨的情况下致电get()

每当返回响应时,您的资源对象(在本例中为Phones)将自动填充。 你不需要回电。

如果您需要执行某些资源操作(save/delete..etc),您可以进行回调,这需要先前调用的某些参数。

$resorce不返回承诺。 使用在其上定义的默认方法return promise of the action,该方法在成功时得到解决,在出错时被拒绝。

所以,你不能承诺链接。你需要回调。

您可以从angular#$resource

获得更多