2014-09-15 17 views
5

Tôi là một người mới bắt đầu với AngularJS, và không thể tìm thấy lỗi của tôi trong mã nàyAngularjs Resource URL

var myCarResource = $resource('cars/:carId', 
     { 
      carId:'@id' 
     }); 
    var car = myCarResource.get({id:'abc'}); 

URL mong muốn: .../cars/abc

Các gọi là URL là: .../cars?id=abc

Tôi đang sử dụng angularjs v1.2.24

Có ai giúp tôi không? Cảm ơn

+2

Có thể điều này có thể giúp http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url – Yalamber

Trả lời

5

Như đã nêu trong tài liệu hướng dẫn $resourceparamDefaults:

Cho một mẫu/path /: động từ và tham số {động từ: 'chào', chào: 'Hello'} kết quả trong URL/path/greet? salutation = Xin chào.

Nếu giá trị tham số được bắt đầu bằng @ thì giá trị cho rằng tham số sẽ chiết xuất từ ​​các tài sản tương ứng trên đối tượng dữ liệu (được cung cấp khi gọi một phương pháp hành động). Ví dụ, nếu đối tượng defaultParam là {someParam: '@someProp'} thì giá trị của someParam sẽ data.someProp

Điều này cho thấy bất kỳ động từ quy định tại các url parameterizd phù hợp với các phím được định nghĩa trong các tham số mặc định của tham số $resource hoặc các tham số lớp $resource (get, save, etc ..) sẽ có giá trị tương ứng của khóa đó thay thế động từ trong url. Các ký hiệu '@' trên Mặt khác, đã không giải thích đúng cách trong bối cảnh này, nó cần phải có được:

Nếu giá trị tham số được bắt đầu bằng @ thì giá trị cho rằng tham số sẽ được trích xuất từ ​​tương ứng thuộc tính trên đối tượng dữ liệu (được cung cấp khi gọi phương thức hành động dụ).

phương pháp hành động Instance ($ nhận được, $ tiết kiệm, $ xóa, vv ..), là phương pháp được sử dụng cho các đối tượng dữ liệu lấy ra sử dụng phương pháp $resource vụ kiện tập thể. Đây thường là hữu ích khi chuỗi yêu cầu với cùng một tài nguyên.

EXAMPLE DEMO

Giả sử rằng cars/abc của bạn trả về một json phản ứng của:

{ 
    "id": "abc" 
} 

Đọc các ý kiến ​​cho thấy sự phản ứng của từng phương pháp hành động gọi.

var myCarResource = $resource('cars/:carId', 
{ 
    carId:'@id' 
}); 


// This sends a GET request '/cars/?id=abc 
myCarResource.get({id:'abc'}); 

// This sends a GET request '/cars/abc' 
myCarResource.get({carId:'abc'}); // returns {"id": "abc"} 

myCarResource.get({carId:'abc'}).$promise.then(function(car) { 

    // sends a POST request '/cars/abc', it replaces the :carId verb from the 
    // @id notation you have defined in the parameter default. It also sends, 
    // other parameter defaults defined with '@' that are defined as verbs in the url. 
    car.$save(); 

}); 
+0

Từ @Yalamber bình luận/link ở trên, tùy chọn khác là phải làm như sau : 'myCarResource.nhận được ({}, {id: 'abc'}); 'Từ hiểu biết hạn chế của tôi, tôi tin rằng đối tượng đầu tiên có liên quan trực tiếp đến mẫu URL và do đó phải khớp với tên của: param trong URL (trong này case, carId). Đối tượng thứ hai là đối tượng được sử dụng khi bạn sử dụng '@id' và sẽ kéo ID của đối tượng thứ hai và khớp với ID đó: carId –

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