8
votes

Angularjs - Création d'un objet de service

Au lieu de poster dans la liste de diffusion angulaire, je pense que cela peut être plus de la question JavaScript. J'espère que la communauté peut également donner une réponse plus rapide.

J'essaie d'encapsuler les données dans un service et de l'injection dans le contrôleur. P>

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'];


3 commentaires

Intéressant. Est lecteur: $ ressource ('/ API / lecteur /: _ id', {}) JavaScript valide?


Extrêmement désolé, éditerait entre-temps. Cela fonctionne si j'ignent à une variable et à l'accès à travers elle, mais pas si vous assignez à l'intérieur d'un objet. Merci


@Graceshao lecteur: $ ressource ('/ API / lecteur /: _ id', {}) oui s'il fait partie d'une définition de membre ...


3 Réponses :


0
votes

On dirait que le JS se plaint du code pour le joueur. Je suppose que lecteur = $ ressource ('/ API / lecteur /: _ id', {}) fait lecteur a un appel de propriété Query . Le formulaire que vous avez changé pour ne pas faire lecteur avoir cette propriété.


4 commentaires

J'apprends toujours JS, alors essayant de comprendre pourquoi. Comment ça différent si une enveloppe dans un objet?


Si vous regardez dans la fonction $ ressource , il peut avoir requête comme une propriété de l'objet de retour. Mais vous avez changé en {ressource: $ ressource ('/ API / lecteur /: _ id', {})} , qui n'a pas la propriété appelée requête


Alors, n'est-ce pas autorisé à chaîner les méthodes?


Que voulez-vous dire par enchaînant les méthodes dans votre contexte?



0
votes

OK, après quelques essais, les suivants ont fonctionné.

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


0 commentaires

6
votes

Vous créez une usine, c'est la manière atypique de faire. Vous ne voulez pas retourner une instance. Angular vous donnera une instance dans votre contrôleur.

 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' } },
    });


8 commentaires

Dan, je reconnais votre nom de la liste de diffusion angulaire :-). Je voulais ajouter des méthodes personnalisées au service. Je pourrais également créer une autre et injecter également, mais je me demandais si je pouvais éviter de créer un service juste pour renvoyer un objet de ressource, mais encapsuler des fonctionnalités plus connues. Ce que vous pensez?


Je ne sais pas que je comprends, vous pouvez ajouter des méthodes personnalisées que vous souhaitez utiliser un objet de ressources, si les mêmes défaut ne répondent pas à vos besoins.


euh. J'ajoutais une fonction non-ressource à cette usine / service. Par exemple, la mise en cache de la réponse à la demande d'obtention initiale et de la définir à $ de portée dans les contrôleurs. Peut être un anti-motif, mais j'apprends toujours.


Vous pouvez injecter des services dans d'autres services afin que vous puissiez obtenir une réutilisation là-bas. J'encendie des objets de ressources pour rendre l'application testable et flexible.


J'ai posté un message dans la liste de diffusion angulaire


Super. Le service d'injection à un autre est meilleur. Merci d'avoir suggéré. Veuillez partager votre pensée sur mon message dans la liste de diffusion. Merci.


Hey Dan, merci pour cette brillante morceau de code. Fonctionne absolument bien. J'essaie de cancer les données dans une fabrique de cache et de ne pas être capable de le faire fonctionner. Donc, fondamentalement, je veux que cela reçoive les données une fois et la mettre en cache et chaque requête ultérieure Shud soit servie à partir de cache. Avez-vous un exemple de ce code?


@bsr grande question. Avec la version 1.2, l'équipe angulaire a permis de remplacer / étendre les modules, ce serait donc une pratique acceptée. NG-Ressource a toujours été toujours séparée. Vous pouvez étendre la ressource NG ou (écrire le vôtre) et l'espace de noms avec votre propre nom. Mieux ne pas utiliser le même nom de «ressource NG». Cela vous donnerait la capacité d'avoir votre propre fonctionnalité encapsulée.