2016-03-31 6 views
0

Ich habe zwei Module nämlich Authentifizierung und Home und sie haben dort eigene Controller.Jede von ihnen haben den gleichen Namen controllers.jsWie kann man einen Wert von einem anderen Controller in angularjs anzeigen?

Ich muss Wert wie $ scope.username in Homepage (Modul Home) anzeigen, die kommt vom Controller des Moduls Authentifizierung. Wie geht es ??

+0

Mögliche Duplikate von [Angularjs Daten zwischen Controllern teilen] (http://stackoverflow.com/questions/18227090/angularjs-sharing-data-between-controllers) –

Antwort

2

Es gibt viele Möglichkeiten. Ich würde es vorziehen, dass Sie eine app.factory('dataFactory' , func(){..}) und get/set Daten dort machen und Ihren Wert in jedem Modul durch die App abrufen.

app.factory('testFactory', function(){ 
     var _name = ''; 
    return { 
     getName: function(text){ 
      return _name; 
     }, 
     setName: function(name){ 
      _name = name; 
     } 
    }    
}); 

Arbeiten Fiddle

Hoffe, es hilft.

+0

meine Frage ist $ scopename = Admin setzen und will es zu Rufen Sie von der Homepage als {{$ scopename}} an. Was muss ich dann in Ihrem obigen Code ändern? – Sherin

+0

Nichts. Sie müssen nur 'testFactory.getName()' aufrufen, um Ihre Namensvariable in Ihrem 'homeController' zu erhalten. Sehen Sie dies [aktualisierte Geige] (http://jsfiddle.net/jsalaat/k3phygpz/872/) –

0

Sie können stattdessen Shared Service verwenden, der Ihren Wert zurückgibt und der in Ihrem Controller diesen Dienst als Abhängigkeit injiziert.

z.B.

angular.module('yourApp') 
    .value("username", "Jon") 
    .controller("index", ["$scope", "username", function($scope, username) { 
     $scope.username = username; 
    }]); 

oder durch die Verwendung von Fabrik Rezept:

angular.module('yourApp') 
    .factory("username", function(){ 
     var value = 'John'; 
     return { 
     get: function(){ 
      return value; 
     }, 
     set: function(newName){ 
      value = newName; 
     } 
     } 
    }) 
    .controller("index", ["$scope", "username", function($scope, username) { 
     $scope.username = username.get(); 
    }]); 

Wenn dieser Wert dynamisch sein wird Sie Wert als Objekt speichern und Referenz zurück, dann müssen Sie nicht manuell erstellt Uhren verwenden, um zu sehen, wenn der Wert geändert:

angular.module('yourApp') 
    .factory("username", function(){ 
     var username = { 
      value: 'John' 
     }; 
     return { 
     get: function(){ 
      return username; 
     }, 
     set: function(newName){ 
      username.value = newName; 
     } 
     } 
    }) 
    .controller("index", ["$scope", "username", function($scope, username) { 
     $scope.usernameObj = username.get(); 
    }]); 

und im Blick:

{{usernameObj.value}} 

können Sie dies auch mithilfe der prototypischen Vererbung von $scope tun, indem Sie den Wert im übergeordneten Bereich speichern.

Verwandte Themen