2017-01-24 2 views
0

Ich habe einen Dienst, der bestimmte Objekt speichert, um es zwischen verschiedenen Controller zu teilen. In diesem Fall habe ich den folgenden CodeService erhalten Objekt Null nach init

$rootScope.$on('controller.event', function(event, arg){ 
      self.backendConnectorService.getBackendObject('99901').then(function(object){ 
     if(object) { 
      self.myService.selectDeselectObject(object); 
      console.log(self.myService.getCurrentObject()); 
      $state.go('myApp.mainArea.appsArea.objects.wizards'); 
     } 
    }); 

Wenn ich mein Objekt, das ich in diesem Zustand gehen, die das Objekt initialisiert werden müssen. Das Problem ist, dass, wenn ich den Controller für diesen Zustand laden, wenn ich tun self.myService.getCurrentObject() gibt null zurück. Wenn ich die console.log im obigen Code ausführe, bekomme ich das korrekte Objekt. Warum ist das? Ich dachte, dass Dienste Singles sind.

Antwort

1

Wenn Sie versuchen, Daten zwischen Zuständen zu bewahren, müssen Sie in Bezug auf die Verwendung des integrierten eckigen Routers oder des UI-Routers der dritten Partei denken (sehr populär, das ich bevorzuge). Dann können Sie Auflösungen verwenden, um Injektionen aufzulösen, oder Parameter, um Daten von einem "Status" zu einem anderen zu übertragen.

Sie bekommen Ihr "Objekt" dann bewegenden Zustand - das löst einen anderen Controller aus, verliert Ihr Objekt. Sehen Sie sich die Seite angular router von scotch.io an, was sehr hilfreich ist. Sie sollten besser die Auflösung in der Datei state.config.js verwenden und sie dann in Ihren Controller zur Verwendung einspeisen.

+0

Kann ich verschiedene Objekte abhängig vom vorherigen Zustand auflösen? Ich meine, wenn ich von Zustand A zu B gehe, brauche ich ObjectTypeA und wenn ich von Zustand C zu B gehe, brauche ich ObjectTypeB? – acostela

+0

Sie können -irgendein- Objekt, das Sie möchten, auflösen, vorausgesetzt, Sie können. – rrd

Verwandte Themen