2015-02-13 18 views
8

tôi đang học dịch vụ $ nguồn góc và trong angular tutorial một hành động tùy chỉnh được thêm vào (query) có phương pháp bộ của nó để 'get' và isArray được thiết lập là true

return $resource('phones/:phoneId.json', {}, { 
     query: {method:'GET', params:{phoneId:'phones'}, isArray:true} 
}); 

Tuy nhiên, nếu bạn nhìn vào the docs for $resource hành động 'truy vấn' đã có phương pháp bộ của nó để 'get' và isArray đã được thiết lập là true bởi mặc định. Vì vậy, tôi nghĩ rằng tôi chỉ có thể để lại những tài sản ra.

này làm việc cho phương pháp bất động sản, nhưng nó chỉ ra rằng nếu tôi bỏ qua isArray tài sản tôi nhận được lỗi này:

Error: [$resource:badcfg] Error in resource configuration for action query . Expected response to contain an object but got an array

Tại sao vậy?

+0

Bạn đã xóa truy vấn khỏi $ resource? 'return $ resource ('phones /: phoneId.json'); ' –

+0

không, tôi chỉ cần loại bỏ thuộc tính phương thức và tôi muốn loại bỏ thuộc tính isArray nhưng không hoạt động – kevinius

+0

Nhưng tại sao bạn tạo/thay thế truy vấn tùy chỉnh hành động như đã có sẵn? Sử dụng mã tôi đã đăng và truy vấn sẽ hoạt động –

Trả lời

16

Tôi nghĩ bạn đã hiểu nhầm tài liệu.

Theo mặc định mà không cần thêm bất kỳ hành động tùy chỉnh, sau đây được hỗ trợ:

'get': {method:'GET'}, 
'save': {method:'POST'}, 
'query': {method:'GET', isArray:true}, 
'remove': {method:'DELETE'}, 
'delete': {method:'DELETE'} 

Vì vậy, theo mặc định các hành động query hy vọng một mảng để được trả lại mà làm cho tinh thần từ một truy vấn thường sẽ trả về một mảng các bản ghi.

Vì vậy, nếu bạn sử dụng:

phonecatServices.factory('Phone', ['$resource', function($resource){ 
    return $resource('phones/phones.json'); 
}]); 

Sau đó bạn có thể thực hiện một truy vấn như vậy:

var queryParams = { name: 'test' }; 

Phone.query(queryParams, {}, function (response) { 
    $scope.phones = response; 
}); 

Bây giờ nếu bạn muốn thêm một hành động tùy chỉnh sau đó mặc định cho isArrayfalse vậy:

return $resource('phones/:phoneId.json', {}, { 
     someCustomAction: {method:'GET', params:{phoneId:'phones'} } 
}); 

cần trả lại một đối tượng. Nếu một mảng được trả lại thì isArray cần phải được đặt thành true như sau:

return $resource('phones/:phoneId.json', {}, { 
     someCustomAction: {method:'GET', params:{phoneId:'phones'}, isArray: true } 
}); 
+3

Để công bằng, thật là dễ dàng để hiểu nhầm tài liệu của Angular. :) – MaxRocket

Các vấn đề liên quan