6
votes

Ajouter des méthodes à une collection renvoyée à partir d'une requête de ressources angulaires

J'ai une ressource qui renvoie un tableau d'une requête, comme: xxx

est-il possible d'ajouter des méthodes de prototype à la matrice renvoyée de cette requête? (Remarque, pas à array.pototype ).

Par exemple, j'aimerais ajouter des méthodes telles que HASBOODWITTLE (titre) à la collection .


1 commentaires

3 Réponses :


4
votes

Ceci est probablement un bon cas pour créer une ressource d'extension de service personnalisée et ajouter des méthodes d'utilité, plutôt que d'ajouter des méthodes aux valeurs renvoyées à partir du service de ressources par défaut.

books = Book.list(function(){
    //check in the on complete method
    var hasBook = Book.hasBookWithTitle(books, 'someTitle');
})


0 commentaires

5
votes

La suggestion de Ricick est une bonne, mais si vous souhaitez avoir une méthode sur le tableau qui retourne, vous aurez du mal à faire cela. Fondamentalement, ce que vous devez faire est de créer un peu de wrapper autour de $ de ressource et de ses instances. Le problème que vous rencontrez est cette ligne de code d'angulaire-ressource.js: xxx

C'est ici que la valeur de retour de $ de ressource est configurée. Ce qui se passe est la "valeur" est peuplé et renvoyé alors que la demande Ajax est exécutée. Lorsque la demande AJAX est terminée, la valeur est renvoyée dans la "valeur" ci-dessus, mais par référence (à l'aide de la méthode angulaire.copy ()). Chaque élément de la matrice (pour une méthode comme Query ()) sera une instance de la ressource que vous utilisez.

de sorte que vous pourriez étendre cette fonctionnalité serait quelque chose comme ceci (non testé code, donc ne fonctionnera probablement pas sans quelques ajustements): xxx

à nouveau, vous devrez vous gâcher un peu, mais c'est l'idée de base. < / p>


0 commentaires

2
votes

Regarder le code dans Angular-Resource.js (au moins pour la série 1.0.x) Il n'apparaît pas que vous pouvez ajouter un rappel pour tout type de comportement par défaut (et cela semble être la conception correcte à Moi).

Si vous utilisez simplement la valeur dans un seul contrôleur, vous pouvez transmettre un rappel chaque fois que vous invoquerez Query code> sur la ressource: p> xxx Pré>

Alternativement, vous pouvez créer un service qui décore la ressource de livres, transfère tous les appels pour obtenir / interroger / enregistrer / etc., et décore le tableau avec votre méthode. Exemple ici: http://plnkr.co/edit/njkpsuraxesyhxlj8lg p>

app.factory("Books",
  function ($resource) {
    var self = this;
    var resource = $resource("sample.json");

    return {
      get: function(id) { return resource.get(id); },
      // implement whatever else you need, save, delete etc.
      query: function() {
        return resource.query(
          function(data) { // success callback
            data.hasBookWithTitle = function(title) {
              for (var i = 0; i < data.length; i++) { 
                if (title === data[i].title) {
                  return true;
                }
              }
              return false;
            };
          },
          function(data, response) { /* optional error callback */}
        );
      }
    };
  }
);


0 commentaires