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…}

编辑2:

我按照建议尝试了

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 资源 REST 没有方法 '$save'

4

1 回答 1

0

在您的控制器中注入服务,例如;

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

希望能帮助到你。

于 2013-08-26T06:51:39.067 回答