2013-03-03 163 views
7
// Set up the $resource 
$scope.Users = $resource("http://localhost/users/:id"); 

// Retrieve the user who has id=1 
$scope.user = $scope.Users.get({ id : 1 }); // returns existing user 

// Results 
{"created_at":"2013-03-03T06:32:30Z","id":1,"name":"testing","updated_at":"2013-03-03T06:32:30Z"} 

// Change this user's name 
$scope.user.name = "New name"; 

// Attempt to save the change 
$scope.user.$save(); 

// Results calls POST /users and not PUT /users/1 
{"created_at":"2013-03-03T23:25:03Z","id":2,"name":"New name","updated_at":"2013-03-03T23:25:03Z"} 

我期望這會導致PUT到/用戶/ 1與更改屬性。但是它改爲POST給/ users,並創建一個新用戶(帶有一個新的id以及新的名稱)。

有什麼我做錯了嗎?

AngularJS v1.0.5 

回答

8

你只需要告訴$資源,他有怎樣的路徑參數綁定 「:ID」 與JSON對象:

$scope.Users = $resource("http://localhost/users/:id",{id:'@id'}); 

這應該工作, 問候

+1

謝謝你,90%在那裏,它現在發佈到/ users/1與更新的用戶。但是現在如何讓它變成PUT而不是POST呢?很接近。 – 2013-03-04 01:43:52

+0

我想這是設計的POST。當它是一個新資源時,我將不得不重寫「保存」到POST,並且當它是對現有資源的更新時。 http://docs.angularjs.org/api/ngResource.$resource – 2013-03-04 03:56:23

+15

回答我關於PUT而不是POST的問題,$ resource(「/ users /:id」,{'id':'@id'}, {更新:{方法: 'PUT'}});爲PUT做訣竅。只需以User.save(user)和user。$ save的方式調用User.update(user)或user。$ update。 – 2013-03-04 19:13:28

0

感謝您的回答。它最終也適用於我。 作爲一個方面說明,我使用的是.NET WEB API,我的實體具有Id屬性(大寫「I」)。

$scope.Users = $resource("http://localhost/users/:Id",{Id:'@Id'}); 

希望它能幫助: 看跌,只有經過我用下面的刪除工作。

+1

使用.NET不會影響您是否需要添加'{Id:'@ Id'}' – Arion 2014-04-11 23:06:36

相關問題