2013-01-14 54 views
1

我已經定義了自己的使用API​​與Angular.js對象:不能與angular.js刪除

angular.module('api', ['ngResource']) 
    .factory('Server', function ($resource) { 
     return $resource('http://localhost\\:3000/api/servers/:name'); 
    }) 
    .factory('ActiveServer', function ($resource) { 
     return $resource('http://localhost\\:3000/api/servers/active/:name', {}, 
      { start: {method: 'POST'}, stop: {method: 'DELETE'} }); 
    }); 

的想法是,我有一組定義的服務器,可通過/api/servers/ URI 。一個特定的服務器可以通過將其添加到/api/servers/active/ uri來啓動,並通過刪除來停止。

在我的控制,我有以下代碼:

$scope.start = function() { 
    ActiveServer.start(this.server); 
}; 

$scope.stop = function() { 
    ActiveServer.stop(this.server); 
}; 

這又是通過按鈕

<div class="well span4" ng-repeat="server in servers"> 
     <h1>{{server.definition.name}}</h1> 
     <span class="label label-info">{{server.status}}</span> 
     <button type="button" class="btn btn-primary" 
       ng-click="start()">Start</button> 
     <button type="button" class="btn btn-primary" 
       ng-click="stop()">Stop</button> 
    </div> 

啓動服務器工作正常的觸發,但我有麻煩停止它。上面的代碼具有以下請求結束:

Request URL:http://localhost:3000/api/servers/active?$$hashKey=005&_events=[object+Object]&definition=[object+Object]&status=ready 
Request Method:DELETE 

definition -part我的服務器對象的,包含標識服務器停止名稱,isn't系列化右。

我該如何解決這個問題?

回答

3

如果您的API(ActiveServer)只需要接收服務器的名稱即可使用,則在服務調用期間僅傳遞服務器的名稱。就像這樣:

$scope.start = function() { 
    ActiveServer.start({name: this.server.definition.name}); 
}; 

$scope.stop = function() { 
    ActiveServer.stop({name: this.server.definition.name}); 
}; 

傳遞整個this.server對象中的任何服務調用將導致整個物體上被參數化到HTTP請求。

擴展解釋:

當您使用您的$resource網址類似api/servers/:name,你基本上是說,:name部分將通過一個屬性具有相同名稱的值來代替(在此情況下,'名稱')收到的參數(即{name: 'someName'})。

從angularJS $resource documentation

在參數對象中的每個密鑰值首先結合到URL模板 如果存在的話,然後任何過量鍵後附加在URL的搜索查詢 ?。給定一個模板/路徑/:動詞和參數 {動詞:'問候',稱呼:'你好'}結果URL爲 /path/greet?salutation = Hello。如果參數值的前綴爲 @,那麼將從數據對象 中提取該參數的值(對非GET操作有用)。

所以,如果你撥打service.get({name: 'abc'})那麼這個請求的URL會 api/server/abc

如果你打電話service.get({name: 'abc', id: '123'})那麼URL將是api/server/abc?id=123

在你的情況下,this.server對象看起來是這樣的:

{ 
    $$hashKey: 005, 
    _events: {}, 
    definition: {}, 
    status: ready 
} 

由於AngularJS確實不做深入參數化,_eventsdefinitions在URL上顯示爲_events=[object+Object]&definition=[object+Object]

+0

這可能是一種解決方法 - 我必須嘗試一下 - 但我很想解釋爲什麼我的解決方案無法正常工作,以及如何使用它。 – Vegar

+1

用一些擴展的解釋更新了我的答案。希望能幫助到你。 – bmleite