2017-12-27 1 views
0

Ich verwende eine Factory, um eine Liste der Ordner zu erhalten und sie im Frontend anzuzeigen. Auch im Frontend habe ich ein Formular wo ich einen neuen Ordner zur bestehenden Liste hinzufügen kann. Nach dem Hinzufügen eines Ordners möchte ich meine Factory-Instanz aktualisieren und die aktualisierte Ordnerliste anzeigen.Angular Js Aktualisieren einer neuen Factory-Instanz

// Fabrik

angular.module('myapp').factory('archiveService', ['$http', 'ApiUrl', function($http, ApiUrl) { 
var archiveService = function() { 
    this.repos = []; 
    this.busy = false; 
    this.page = 0; 
}; 
archiveService.prototype.nextPage = function() { 
    if (this.busy) return; 
    this.busy = true; 
    var url = ApiUrl.url + '/folders/?page=' + this.page; 
    $http.get(url).then(function(res) { 
     console.log(res); 
     this.repos = res.data; 
     if (items.repos == 0) { 
      return; 
     } 
     this.page += 1 
     this.busy = false; 
    }.bind(this)).catch(function(data) { 
    }.bind(this)); 
}; 
return { 
    archiveService: archiveService, 
} 

}]);

// Das ist mein Controller

angular.module('myapp').controller('archiveModalController', ['$rootScope', '$scope','archiveService', function($rootScope, $scope, archiveService) { 

// I want to refresh this and show new data on update 

    $scope.archivelist = new archiveService.archiveService(); 

}])

Ich mag würde wissen, wie ich kann ich so aktualisieren können die neuen aktualisierten Daten

$ scope.archivelist = new archiveService.archiveService() erhalten;

Antwort

0

Winkelservices folgen dem Muster singleton, was bedeutet, dass die Instanziierung einer Klasse auf ein einzelnes Objekt beschränkt ist.

Auch da Sie eine Fabrik verwenden:

angular.module('myapp').factory('archiveService', [<dependencies>, function() { 
    function nextPage() { 
     //code here 
    ); 

    return { 
     nextPage: nextPage 
    } 

}]); 

Dann in Ihrem Controller Sie einfach:

archiveService.nextPage(); 

die Variablen an Ort und Stelle sehen ich nextPage glauben könnte einfach die Seite als Parameter erhalten und da repos ein Array ist, vermute ich, dass Sie die neuen abgerufenen Daten zu diesem Array hinzufügen wollten? Welches wäre: this.repos.push(res.data;) anstelle von this.repos = res.data;

Punkt ist, jedes Mal, wenn Sie neue Daten anfordern möchten, sollten Sie die richtige Service/Factory-Methode von der Steuerung aufrufen.

So bei dem Controller init, müssen Sie nur:

(function init() { 
    $scope.archivelist = archiveService.nextPage(); 
})(); 

Obwohl, wie ich festgestellt, sollten Sie vielleicht einen Anfangswert wie nextPage(1) haben und von dort die gewünschte Seite, die Sie an die Fabrikmethode möchten senden sein richtig behandelt.

Verwandte Themen