2016-03-22 17 views
1

Ich verwende das MEAN JS-Framework und so ziemlich alles, was damit einherging. Ich versuche jedoch, eine benutzerdefinierte Abfrage hinzuzufügen, wenn ein Benutzer zu einem bestimmten Pfad (URL) geht. Dies ist der Code, der mit MEAN JS kam: (in modules/artikel/Client/Dienstleistungen)Mean JS-Stack, erstellen Sie eine Fabrik, die zwei verschiedene Pfade behandelt

'use strict'; 

//Articles service used for communicating with the articles REST endpoints 
angular.module('articles').factory('Articles', ['$resource', 
    function ($resource) { 
    return $resource('api/articles/:articleId', { 
     articleId: '@_id' 
    }, { 
     update: { 
     method: 'PUT' 
     } 
    }); 
    } 
]); 

Und dies kümmert sich um alle in der Steuerung definierten Funktionen, die da sind: create, update, find, findOne, remove. Jetzt versuche ich eine weitere Funktion, $scope.findByCategory = function (category) {...} in der Steuerung hinzuzufügen. Aber damit es mit dem Server kommunizieren kann, muss ich den Pfad zu den Diensten hinzufügen.

Wie mache ich das? Wie bearbeite ich meinen Service (oder Factory), so dass er alle Funktionen, die ich in meinem Controller definiere, kümmert. (Ich habe bereits die Routen auf der Serverseite eingerichtet.) Mit anderen Worten, ich möchte den obigen Code und den untenstehenden Code in einem Stück in meinem Client-Dienst kombinieren. Hinweis: Das einzige, was sich ändert, ist der Pfad.

//Articles service used for communicating with the articles REST endpoints 
angular.module('articles').factory('Articles', ['$resource', 
    function ($resource) { 
    return $resource('api/articles/category', { 
     articleId: '@_id' 
    }, { 
     update: { 
     method: 'PUT' 
     } 
    }); 
    } 
]); 

Antwort

1

Es gibt mehrere Wege, es zu tun, können Sie eine andere Fabrik namens tun könnte Category oder Sie können die gleiche Rückkehr ein Objekt wie folgt verwenden:

angular.module('articles').factory('Articles', ['$resource', 
    function($resource) { 
     return { 
      articles: $resource('api/articles/:articleId', { 
       articleId: '@_id' 
      }, { 
       update: { 
        method: 'PUT' 
       } 
      }), 
      categories: $resource('api/articles/:articleId/category', { 
       articleId: '@_id' 
      }, { 
       update: { 
        method: 'PUT' 
       } 
      }) 
     }; 
    }; 
]); 

Sie werden sie von einem Controller rufen Sie mit für Beispiel Articles.articles.get() und Articles.categories.get()

und wahrscheinlich möchten Sie api/articles/:articleId/category die Kategorie Route ändern es bekommen und so für die articleId

+0

Danke, es funktioniert. Ich werde Ihre Vorschläge berücksichtigen. Ich werde schließlich ein anderes Schema für Tags haben, also wäre es vielleicht sinnvoll, zwei Controller und zwei Fabriken zu haben. – user2512806