2016-06-27 15 views
0

Ich weiß, wie Sie Daten zwischen den Controllern mit Service teilen, aber dieser Fall ist anders, also bitte überdenken Sie die Frage.Wie alle Instanzen des gleichen Controllers zu aktualisieren

Ich habe so etwas wie dies für die Benutzeroberfläche:

<jsp:include page="../home/Header.jsp" /> 
<div data-ng-view></div> 
<jsp:include page="../home/Footer.jsp" /> 

Innerhalb der ng-Ansicht, instanziiert ich eine Controller-Instanz mit "Daten-ng-Controller =" BuildController als ctrl“Es wird diese Funktion ausgeführt. das könnte bis zu 2 Stunden dauern. Nachdem es fertig ist, wird der buildCompletionMsg aktualisiert und einen Kasten Pop-up sagen, es fertig ist.

self.buildServers = function(servers, version) { 
     BuildService.buildList(servers, version).then(
      function(data) { 
       self.buildCompletionMsg = data; 
       $('#confirmationModal').modal('show'); 
      }, 
      function(errResponse) { 
       console.error("Error getting servers." + errResponse); 
      } 
     ); 
    }; 

das Problem ist, dass ich die modale will im Header.jsp seine doesn Datei, so Egal, in welcher Ansicht sich der Benutzer befindet, er würde die Benachrichtigung sehen erefore in Header.jsp habe ich eine andere Controller-Instanz mit "Daten-ng-Controller =" BuildController als ctrl“und binden Sie es

<div data-ng-controller="BuildController as ctrl"> 
    <div class="modal fade" id="confirmationModal" role="dialog" aria-labelledby="confirmLabel"> 
    <div class="modal-dialog modal-lg" role="document"> 
     <div class="modal-content"> 
      <div class="modal-body"> 
       <h3>{{ ctrl.buildCompletionMsg }}</h3> 
      </div>   
     </div> 
    </div> 
    </div> 
</div> 

Verwendung Wie Sie sehen können, auch wenn ich so etwas wie:

self.buildCompletionMsg = BuildService.getCompletionMsg(); 

Es würde nur die Ctrl-Instanz der ng-view-Seite aktualisieren, und die in Header.jsp ist immer noch null.

Wie kann ich alle Instanzen von BuildController auf verschiedenen Seiten aktualisieren oder nur die in der Datei Header.jsp aktualisieren?

Antwort

0

Ich fand die Antwort auf meine eigene Frage. Die Lösung ist auf einen Objektverweis oder Array im Dienst zu haben (es ist nicht für einfachen String funktioniert) wie folgt aus:

angular.module('buildModule').factory('BuildService', ['$http', '$q', function($http, $q) { 

    var self = {}; 
    self.completionStatus = { data: "" }; 

dann auf $ http Erfolg den completionStatus aktualisieren

self.status.data = response.data; 

Und in die Steuerung wird die Variable direkt auf dieses Objekt

self.buildCompletionMsg = BuildService.completionStatus; 

Dies aktualisiert die Variable {{buildCompletionMsg}} auf allen Seiten eingestellt.