2014-02-20 79 views
4

在AngularJS中,我試圖將控制器調用中的參數傳遞給服務工廠。但是,我似乎無法獲得通過參數。該函數始終通過我設置爲服務中的默認值。如果我不包含默認值,它不會傳遞任何東西。AngularJS - 控制器資源調用不傳遞參數到服務工廠?

例如,我的代碼類似於:

控制器

... 
Room.enter({room_id: '5'/*$scope.room_id*/}, function(return_data) 
    { 
     //Callback function stuff. 
     ... 
    } 
... 

服務

... 
services.factory('Room', ['$resource', 
    function($resource) 
     { 
      return $resource('/room/:room_id', {}, { 
        enter: {method: 'PUT', params:{room_id:'-1'}} 
     }); 
    } 
]); 
... 

這樣,HTTP資源 「/間/ -1」即使我試圖通過5來稱呼。

如果我刪除了「輸入」方法的params部分,那麼「/ room」就是所有被調用的。沒有參數通過。

任何關於我在做什麼錯誤的建議?非常感謝!

回答

9

嘗試

services.factory('Room', ['$resource', 
    function($resource) 
     { 
      return $resource('/room/:room_id', {}, { 
       enter: {method: 'PUT', params:{room_id:'@room_id'}} 
     }); 
    } 
]); 

編輯:

你的參數作爲對象傳遞。因此,'@room_id'意味着應該提取傳遞對象的room_id屬性的值。

請注意名稱不能匹配。在你的控制器,你可以如說

Room.enter({id: '5'}...

,並獲取參數的值在您的服務爲

..., params:{room_id:'@id'}

+0

工程。介意解釋爲什麼?看一下AngularJS教程,他們沒有在將參數傳遞給資源的get函數時指定任何參數。那麼爲什麼這是不同的? – golmschenk

+0

我編輯答案添加一個解釋。我希望它有幫助。乾杯 – kubuntu

相關問題