我正在阅读角色教程 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 猜测 没有任何内容,phoneId
从phones
获取默认值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()
需要回调函数
答案 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
,该方法在成功时得到解决,在出错时被拒绝。
所以,你不能承诺链接。你需要回调。
获得更多