AngularJS - 创建服务对象

bsr*_*bsr 8 javascript angularjs

我认为这可能更多是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'];
Run Code Online (Sandbox Code Playgroud)

它引发了一个例外

TypeError: Object #<Object> has no method 'query'
Run Code Online (Sandbox Code Playgroud)

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

TypeError: Object #<Object> has no method 'query'
Run Code Online (Sandbox Code Playgroud)

以下工作.

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'];
Run Code Online (Sandbox Code Playgroud)

我的目的是添加更多的数据和方法Player.那么我怎样才能使第一个(对象形式)有效!

Dan*_*yon 6

你正在创建一个工厂,这是非典型的做法.您不希望返回实例.Angular将为您提供控制器中的实例.

 factory('Player', function ($resource) { 
    return $resource('/api/Player/:_id', { });
 })
Run Code Online (Sandbox Code Playgroud)

这是我写的一个服务,用于与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' } },
    });
Run Code Online (Sandbox Code Playgroud)

}).