2013-08-26 79 views
2

我正在使用Angular 1.1.5(請等待angular-ui-router與1.2.0一起使用)。我定義的資源和服務:如何從服務中調用角度資源

myapp.factory('Monitoring', function($resource) { 
    return $resource('/webapp/network/v1/cronjobs/:id/:action', { id: '@id' }, { 
     status: { method: 'PATCH', headers:{'Content-Type': 'application/json'}, params:{action: 'status'}} 
    } 
); 
}); 

myapp.factory('MonitoringCRUDControllerService', ['Monitoring', '$state', function(Monitoring, $state) { 
    return { 
     query: function() { 
      var m = new Monitoring(); 
      var promise = m.$query().then(function(response) { 
       console.log(response); 
       return response.data; 
      }); 
      return promise; 
     }, 
     query1: function() { 
      var m = new Monitoring(); 
      return m.$query(); 
     }, 
     // Angular 1.2.0 RC 
     query2: function() { 
      var m = new Monitoring(); 
      return m.$query().$promise; 
     }  
    } 
}]); 

在我的控制器我試圖queryquery1但他們兩人返回Cannot call method 'then' of undefinedquery2應該是調用資源的1.2.0方法。

編輯:更新控制器

function($scope, $location, MonitoringCRUDControllerService) { 
    $scope.refresh = function() { 
     MonitoringCRUDControllerService.query().then(function(value) { 
      $scope.myData = value; 
     }); 
    }; 
} 

console.log(MonitoringCRUDControllerService)回報Object {create: function, get: function, query1: function, query2: function, update: function…}

EDIT2:

我試過的建議

query3: function() { 
    return Monitoring.query(); 
}, 
query4: function() { 
    var m = new Monitoring(); 
    var promise = m.query().then(function(response) { 
     console.log(response); 
     return response.data; 
    }); 
    return promise; 
}, 

query3返回一個承諾,您可以撥打$then而不是then,它的工作原理。

query4返回錯誤Object #<Resource> has no method 'query'。我使用new的原因是用於傳遞參數(這是它的記錄方式):另請參閱Angular resource REST has no method '$save'

+0

刷新方法定義在哪裏。看起來'MonitoringCRUDControllerService'沒有被注入控制器。請顯示控制器代碼。 – Chandermani

+0

更新的控制器代碼 – Sydney

+0

我認爲你應該使用'query'而不是$ query調用'Monitoring'對象方法。 'var promise = m.query()' – Chandermani

回答

0

在控制器中注入服務,如:

yourApp.controller('ControllerName',function(MonitoringCRUDControllerService){ 
    $scope.refresh = function() { 
     MonitoringCRUDControllerService.query().then(function(value) { 
      $scope.myData = value; 
     }); 
    }; 
}); 

希望它有幫助。

+0

它已經完成了,錯誤在'then'上,所以這意味着查詢被執行,但返回的對象是未定義的。 – Sydney

+0

嘗試將查詢中的函數名稱更改爲其他名稱,並說'get'並將其稱爲MonitoringCRUDControllerService.get(); – BKM