2016-04-27 2 views
5

Ich habe einen Service namens in meinem controller.js definiert. Ich möchte die Variable, die in der vorhanden ist, in zwei verschiedenen Controllern verwenden.Aktualisieren einer Service-Variable in einem Controller und Verwenden des aktualisierten Werts in einem anderen Controller - Angular JS

Mein Service ist wie folgt

App.service('NameService', function(){ 
    this.Name = ""; 
    this.getName = function(){ 
    return this.Name; 
    }; 
    this.setName = function(name){ 
    this.Name = name; 
    } 
}); 

Ich habe einen Controller netController, in dem Namen ich in meinem Nameservice den Wert der Name Variable vorhanden bin zu aktualisieren. Ich möchte den aktualisierten Wert in meinem page1Controller verwenden.

NetController ist wie folgt:

App.controller('netController', ['$scope','$http','$window','NameService', function($scope,$http,$window,NameService) 
    { 
     $scope.initNet = function() 
     { 
      $http.post('/initNet',$scope.network).success(function(response) 
      { 
       if(response.status == "true") 
       { 
        $scope.$watch('NameService.setName()', function(){ 
         NameService.Name = $scope.network.name; 
        }); 
        NameService.setName($scope.network.name); 
        $window.location.href = '/page1'; 
       } 
       else 
       { 
        $scope.error = "Error!"; 
       } 
      }); 
     } 
    }]); 

Wenn ich console.log(NameService.netName); tun in meinem netController es druckt den aktualisierten Wert.

page1Controller ist als

App.controller('page1Controller', ['$scope', '$http','NameService', function($scope, $http,NameService) 
    { 
      console.log(NameService.Name); 
    }]); 

folgt Wann console.log(NameService.name); in meinem ist page1Controller es gibt leere Zeichenfolge.

Kann mir bitte jemand helfen, dies zu beheben?

+0

Sie haben die Funktion NameService.getName(), um den Namen zu erhalten. Aber an einem Ort verwenden Sie NameService.netName, um es zu bekommen, und an der anderen Stelle verwenden Sie NameService.name? Warum nicht NameService.getName() an beiden Stellen verwenden? –

+0

Ich habe Änderungen am Code vorgenommen! Immer noch der gleiche Fehler. – Minions

+0

@Minions Wann wird page1Controller in Bezug auf netController instanziiert? Aufgrund des $ http-Aufrufs könnte es sich nur um ein Zeitproblem handeln, wenn Sie versuchen, den Wert abzurufen. Verwenden Sie unbedingt Factory anstelle von Service, damit Sie das Namensfeld ordnungsgemäß einkapseln können. Sonst kann jemand anderes den Wert der Unterstützungsvariable leicht überschreiben, ohne die Methode Set() zu verwenden. –

Antwort

0

Verwendung Fabrik statt Service

gisApp.factory('NameService', function() { 
    var _name = ""; 
    return { 

     getName: function() { 
      return _name; 
     }, 
     setName: function (name) { 
      _name = name; 
     } 
    } 
}); 
+0

Ich habe das auch versucht. Es druckt immer noch eine leere Zeichenfolge. – Minions

+0

füge den Standardwert hinzu, um es zu benennen und versuche es erneut.Wenn du ** name ** bekommst, dann überprüfe dein Set-Teil – aseferov

+0

Ja! Wenn ich initialisiere, um Namen zu nennen, drucke ich Name! Es wird in meinem netController aktualisiert, aber in meinem page1Controller wird nur der Name gedruckt. – Minions

0

, denn wenn man diese Variable drucken nennen, es ist noch nicht definiert. $ http Rückgabe Versprechen und es braucht einige Zeit Intervall.Haben Sie versucht, Intervall innerhalb page1Controller? wie

App.controller('page1Controller', ['$scope', '$http','NameService', '$timeout' function($scope, $http,NameService, $timeout) 
{ 
    $timeout(function(){ 
     console.log(NameService.name) 
    },2000); 
... 

Edited

Dann etwas versuchen, wie dieser

gisApp.service('NameService', function(){ 
    return { 
    Name: '', 
    getName: function(){ 
    return this.Name; 
    }, 
    setName: function(name){ 
    this.Name = name; 
    } 
}); 

, weil die Syntax, die Sie verwenden, müssen Sie eine Instanz dieses Service erstellen "neue" mit verwenden es als eine Klasse.

+0

Ich habe Ihren Vorschlag versucht! Es wird immer noch eine leere Zeichenfolge zurückgegeben! – Minions

+0

Ich habe nicht gesehen.Sie verwenden "setName" -Funktion.Sie haben nicht "netName" field.and Sie haben keine "Name" -Feld.Sie haben "Name" .no Kleinbuchstaben, mit Großbuchstaben –

+0

Ich habe gemacht Änderungen an meinem Code! Immer noch den gleichen Fehler. – Minions

Verwandte Themen