8

我认为这可能更多的是 javascript 问题,而不是在 Angular 邮件列表中发布。希望 SO 社区也能给予更快的响应。

我正在尝试将数据封装在服务中并注入控制器。

angular.module('myApp.services', ['ngResource']).
    factory('Player', function($resource){
        var Player ;
        Player = {
            resource: $resource('/api/Player/:_id', {} )
        };
        return Player
});


function PlayerDetailCtrl(Player, $routeParams, $scope) {
    $scope.resource = Player.resource.get({_id:$routeParams._id});
}
PlayerDetailCtrl.$inject = ['Player', '$routeParams', '$scope'];

它抛出一个异常

TypeError: Object #<Object> has no method 'query'

$scope.resource = Player.Player.resource.get({_id:$routeParams._id});也会抛出错误

TypeError: Object #<Object> has no method 'query'

以下作品。

angular.module('myApp.services', ['ngResource']).
    factory('Player', function($resource){
        var Player ;
        Player= $resource('/api/Player/:_id', {} )
        return Player
});


function PlayerDetailCtrl(Player, $routeParams, $scope) {
    $scope.resource = Player.Player.get({_id:$routeParams._id});
}
PlayerDetailCtrl.$inject = ['Player', '$routeParams', '$scope'];

我的意图是向Player. 那么我怎样才能使第一个(对象形式)起作用!

4

3 回答 3

6

您正在创建工厂,这是非典型的做法。你不想返回一个实例。Angular 会在你的控制器中给你一个实例。

 factory('Player', function ($resource) { 
    return $resource('/api/Player/:_id', { });
 })

这是我编写的用于与 cakephp REST 服务交互的服务。我前段时间写的,所以只是作为一个例子,我可能会重构。

 factory('CommentSvc', function ($resource) {
    return $resource('/cakephp/demo_comments/:action/:id/:page/:limit:format', { id:'@id', 'page' : '@page', 'limit': '@limit' }, {
      'initialize' : { method: 'GET', params: { action : 'initialize', format: '.json' }, isArray : true },
      'save': { method: 'POST', params: { action: 'create', format: '.json' } },
      'query' : { method: 'GET', params: { action : 'read', format: '.json' } , isArray : true },
      'update': { method: 'PUT', params: { action: 'update', format: '.json' } },
    });

})。

于 2012-06-28T20:32:12.370 回答
0

Ok, after few tries the following worked.

Player = {
            resource: function() {
                     return $resource('/api/Player/:_id', {} )
            }
        };

In this I explicitly return resource object. But cannot explain how it differ from

resource: $resource('/api/Player/:_id', {} )

于 2012-06-28T19:50:02.220 回答
0

看起来 JS 正在抱怨 Player 的一些代码。我猜Player= $resource('/api/Player/:_id', {} )Player一个属性调用query。您更改为的表单不Player具有该属性。

于 2012-06-28T19:12:06.527 回答