2017-12-07 1 views
0

Ich habe eine Steuerung, die ich erwartet haben, werden eindeutige Daten enthalten, sammeln wie folgt:Speichern von Daten zwischen den Controllern als uique

 setInterval(function() { 

      dataStorage.setData('maxTime',maxTime); 
      dataStorage.setData('currentTime',currentTime); 
      dataStorage.setData('previousTime',previousTime); 

      var dMaxTime = dataStorage.getData('maxTime'); 
      var dCurrentTime = dataStorage.getData('currentTime'); 
      var dPreviousTime = dataStorage.getData('previousTime'); 

      $log.debug("Max time " + dMaxTime); 
      $log.debug("Current time " + dCurrentTime); 
      $log.debug("Previous time " + dPreviousTime) 

     }, 2000); 

die einfache Fabrik verwendet, um Daten zwischen den Controllern zu erfassen

myApp.factory('dataStorage', [function() { 

    var dataInfo = []; 

    return { 

     setData: function (key, data) { 
      dataInfo[key] = data; 
     }, 
     getData: function (key) { 
      return dataInfo[key]; 
     } 

    }; 
}]); 

aber wenn ich hin und her gehe zu der Ansicht, die den ersten Code darüber hat, speichert sie dieselben Variablen wieder, aber mit anderen (aktualisierten Werten) und zeigt sie dann im Protokoll an, wie oft diese Ansicht mit dem Controller getroffen wurde.

Gibt es eine Möglichkeit, dies zu verhindern und nur die zuletzt erfassten Daten gespeichert zu haben?

+0

Können Sie Ihren Controllercode etwas erweitern? Wo ist Ihre maxTime, currentTime, previousTime definiert? Was ist das Problem? Protokolliert es zu oft? Ich bin mir nicht sicher, was du fragst. – Vincent

+0

@Vincent ja, es protokolliert zu oft (wie 3, 4 mal mit verschiedenen Werten) – JackTheKnife

+0

Schlagen Sie alle diese Business-Logik von Controller zu Service – charlietfl

Antwort

1

Wenn der Controller zerstört wird, müssen Sie das Intervall löschen, andernfalls läuft es weiter.

app.controller('SomeCtrl', ['$scope', function($scope) { 

    var interval = setInterval(function() { 
    console.log('whatever') 
    }, 2000); 

    $scope.$on('$destroy', function() { 
    clearInterval(interval); 
    }); 

}]); 
Verwandte Themen