2016-04-27 7 views
5

Ho definito un servizio chiamato NameService nel mio controller.js. Voglio utilizzare la variabile presente nello NameService in due controller diversi.Aggiornamento di una variabile di servizio in un controller e utilizzo del valore aggiornato in un altro controller - Angular JS

Il mio servizio è la seguente

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

Ho un regolatore di nome netController in cui sto aggiornando il valore della Name variabile presente nel mio Nameservice. Voglio utilizzare il valore aggiornato nel mio page1Controller.

NetController è la seguente:

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!"; 
       } 
      }); 
     } 
    }]); 

Se faccio console.log(NameService.netName); nel mio netController la fase di stampa il valore aggiornato.

page1Controller è la seguente

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

Quando è fare console.log(NameService.name); nel mio page1Controller sta dando stringa vuota.

Qualcuno può aiutarmi a risolvere questo problema?

+0

Hai la funzione NameService.getName() per ottenere il nome. Eppure su un posto si usa NameService.netName per ottenerlo e sull'altro posto si usa NameService.name? Perché non utilizzare NameService.getName() in entrambe le posizioni? –

+0

Ho apportato modifiche al codice! Ancora lo stesso errore. – Minions

+0

@Minions Quando viene attivato il controllo di pagina1 in relazione a netController? A causa della chiamata $ http potrebbe essere solo un problema di temporizzazione di quando stai cercando di recuperare il valore. Inoltre, usa sicuramente Factory invece di Service in modo da poter incapsulare correttamente il campo del nome. Altrimenti qualcun altro può facilmente sovrascrivere il valore della variabile di supporto senza nemmeno dover usare il metodo Set() –

risposta

0

uso della fabbrica, invece di servizio

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

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

Ho provato anche questo. Sta ancora stampando una stringa vuota. – Minions

+0

aggiungi un valore predefinito per nominare e riprova. Se ottieni ** nome **, controlla la parte impostata – aseferov

+0

Sì! Se inizializzo per nominare sta stampando il nome! Si sta aggiornando nel mio netController ma nel mio controller pagina1 sta stampando solo il nome. – Minions

0

perché quando si chiama per stampare quella variabile, non è ancora definito. $ http ritorno promessa e ha bisogno di alcuni tempo intervallo.Hai provato a impostare l'intervallo all'interno di page1Controller? come

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

cura

Poi provare qualcosa di simile

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

perché la sintassi da utilizzare, è necessario creare un'istanza di tale servizio utilizzando "nuova" da usare è come una classe.

+0

Ho provato il tuo suggerimento! Ancora una stringa vuota viene restituita! – Minions

+0

Non ho visto.Utilizzate la funzione "setName". Non avete il campo "netName" e non avete il campo "nome". Avete "Nome". Mai in minuscolo, con maiuscolo –

+0

che ho fatto cambia al mio codice! Ancora dando lo stesso errore. – Minions