2016-11-08 3 views
0

Ich habe einen Controller und möchte einen Wert eines Bereichs an einen anderen übergeben.Wert des Bereichs an einen anderen Bereich in AngularJS übergeben

app.controller("ChatController", function($scope, $firebaseArray, $timeout, $firebaseAuth, $window) { 
    var ref = firebase.database().ref().child("messages"); 
    var auth = $firebaseAuth(); 

    $scope.messages = $firebaseArray(ref); 

    $scope.sendMessage = function() { 

    //var firebaseUser = $scope.firebaseUser; 

    $scope.messages.$add({ 
     text: $scope.newMessageText, 
     current_time: new Date().toJSON() 
    }); 
    $scope.newMessageText = null; 
    }; 

    $scope.login = function() { 
     $scope.firebaseUser = null; 
     $scope.error = null; 

     auth.$signInWithPopup('google').then(function(firebaseUser) { 
     $scope.firebaseUser = firebaseUser; //access this to the sendMessage scope 
     console.log(firebaseUser.user); 
     }).catch(function(error) { 
     $scope.error = error; 
     }); 

    }; 

}); 

über mich, ich habe sendMessage und loginscope. Ich möchte den Wert $scope.firebaseUser an die loginscope übergeben. Ist das möglich?

+0

Still got nicht was genau Sie suchen nach Überprüfung Ihres Codes – Jigar7521

+0

@ Jigar7521 den Code aktualisiert, können Sie einen neuen Kommentar im Bereich sendMessage sehen.Das ist, was ich versuche zu erreichen. – FewFlyBy

+1

ok jetzt ist es ziemlich verständlich – Jigar7521

Antwort

2

Ich glaube, Sie haben Javascript lexikalischen Scoping und Winkelbereiche vermischt. In Angular liegt der Bereich auf der Controller-Ebene. Dies bedeutet, dass alles innerhalb eines Controllers Zugriff auf den Bereich des Controllers hat. Das bedeutet wiederum, dass Sie nur die $scope.firebaseUser in Ihrer sendMessage Funktion wie so verwenden können:

$scope.sendMessage = function() { 

    var firebaseUser = $scope.firebaseUser; 

    $scope.messages.$add({ 
     text: $scope.newMessageText, 
     current_time: new Date().toJSON() 
    }); 
    $scope.newMessageText = null; 
    }; 

Haben Sie versucht das? Sind Sie auf Probleme gestoßen?

Bitte sehen here für weitere Details

+0

Oh. Es funktionierte. Ich denke eigentlich darüber nach, an einen anderen Controller zu gehen, lol – FewFlyBy

0

ich in es einige Änderungen vorgenommen haben, experimentieren Sie es bitte und lassen Sie mich wissen, ich warte. Ich habe $ rootScope für dieses Szenario verwendet, das als globale Variable in angular vorhanden ist.

Hinweis: Ich schreibe diesen Code, um vorherzusagen, dass Ihr vorhandener Code korrekt ist.

app.controller ("ChatController", function ($ scope, $ firebaseArray, $ timeout, $ firebaseAuth, $ Fenster $ rootScope) {var ref = firebase.database() Ref.(). Kind ("Nachrichten"); var auth = $ firebaseAuth(); $ rootScope.firebaseUser = null; $ scope.messages = $ firebaseArray (ref);

 $scope.sendMessage = function() { 

     var firebaseUser = $rootScope.firebaseUser; 


     $scope.messages.$add({ 
      text: $scope.newMessageText, 
      current_time: new Date().toJSON() 
     }); 
     $scope.newMessageText = null; 
     }; 

     $scope.login = function() { 
      $scope.firebaseUser = null; 
      $scope.error = null; 

      auth.$signInWithPopup('google').then(function(firebaseUser) { 
      $scope.firebaseUser = firebaseUser; //access this to the sendMessage scope 
      $rootScope.firebaseUser = firebaseUser.user; 
      console.log(firebaseUser.user); 
      }).catch(function(error) { 
      $scope.error = error; 
      }); 

     }; 

    }); 
Verwandte Themen