AngularJS : Zugriff auf gespeicherte Daten, die in einer Fabrik nach einem $http-Aufruf
Ich versuche, eine Fabrik zu bauen, zu handeln als staging-Bereich für meine Datenbank-Modelle, als auch eine api zum ausführen von grundlegenden CRUD-Anrufe. Ich möchte Zugriff auf die Daten durch Speicherung in einem Dienst oder einem Werk, und halten Sie api-Methoden zusammen mit ihm, so kann ich Aktionen wie diese in den controller.
$scope.folders = Folders.data(); //for a factory
$scope.folders = Folders.data; //for a Service
Folders.create({name: "My Stuff, $oid: { 5fwewe033333 }, user_id: CurrentUser.id"});
Derzeit bin ich mit der Ordner-Fabrik wie dieser in die controller.
Folders.foldersData().success( function(data, status) {
$scope.folder = data;
})
.error( function(data,status) {
Flash.warning("There was a problem fetching your data");
});
Ich weiß, ich kann nur ein Versprechen, gelöst in der Steuerung, aber mit der Größe des Projekts an dem ich arbeite, ich mag die Idee, den Zugriff auf die Ordner model in einem service, mit aus mit, um einen server aufrufen, um die Daten synchronisieren jedes mal, wenn ich eine änderung vornehmen.
angular.module('cmsApp')
.factory('Folders', function($http, $q){
var folders = {};
var messageWarn = "Upload Retrival Failed.";
return {
get: function(){
var defered = $q.defer();
$http.get('/folders').success( function ( data, status ) {
defered.resolve(data);
})
.error( function ( data, status ) {
defered.reject();
Flash.warning(message_warn);
});
defered.promise.then( function (promise)
folders = promise;
});
},
data: function (){
return folders;
},
}
});
Mein problem ist, dass ich nicht halten kann die Ordner-Objekt bestehen bleiben, nachdem ich call-Ordner.get(). Es kommt immer wieder nachdem ich call-Ordner.Daten() als ein leeres Objekt.
Gibt es einen Weg, um diese Daten gespeichert, in die Fabrik als eine up-to-date Darstellung der Ordner-Modell ist nicht davon abhängig, schlagen die server zu jeder Zeit?
Läuft eckige 1.2.3, auf Schienen 4 API.
- Ja, ich mache ein Beispiel. Ich denke, die Hauptsache ist, du bist verwirrt, ist, dass sich eine Fabrik erstellt einen Dienst und dann ist fertig. Können Sie keinen Zugang zu der Fabrik, sozusagen. Sie nur Dienste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie speichern die Versprechen in den Dienst als ein Objekt an den Dienst. Ich habe die Gabel ausgebaut demo oben, um zu demonstrieren, http://plnkr.co/edit/2HqQAiD33myyfVP4DWg3?p=preview
Als mit den vorherigen Beispielen, der http-Aufruf wird nur einmal gemacht, aber dieses mal das Versprechen Hinzugefügt, die Ordner Artikel auf den service-Objekt, das erzeugt wird, durch die Fabrik.
$http
nennen.In diesem Beispiel wird der Dienst im wesentlichen IST der Daten. Das erste mal den service injiziert wird, eine Verheißung, die erstellt wird, und der Anruf geht raus. Der Dienst ist tatsächlich das Versprechen, dass die Daten, aber wenn der Anruf kommt zurück, das Versprechen wird gelöst mit den Daten. So, den zweiten, Dritten, etc mal den service injiziert wird, wird der Anruf nicht erneut hergestellt - die Fabrik hat bereits seine Arbeit getan und kehrte der service (das Versprechen, in diesem Beispiel).
Live-demo (klicken Sie auf).
Hier ist ein erweiterte demo, in dem ich die Daten doppelt. Hinweis: die Konsole melden - der Anruf wird immer nur einmal gemacht. In dieser demo, die ich aus dem Dienst in ein Objekt mit einer
get
- Methode, gibt das Versprechen. Ich wollte nur zeigen, einen anderen Weg, diese Technik umgesetzt werden kann.then
Funktion sofort Feuer.