将范围值传递给AngularJS中的另一个范围

时间:2016-11-08 04:06:42

标签: javascript angularjs scope angularjs-scope

我有一个控制器,想要将范围的值传递给另一个。

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;
      });

  };

});

在我之上,我有sendMessagelogin scope。我想将$scope.firebaseUser的值传递给login scope。这可能吗?

2 个答案:

答案 0 :(得分:2)

我认为你混淆了Javascript词法范围和Angular范围。在Angular中,范围是控制器级别。这意味着控制器中的所有内容都可以访问控制器的范围。反过来,这意味着您可以在$scope.firebaseUser函数中使用sendMessage,如下所示:

$scope.sendMessage = function() {

   var firebaseUser = $scope.firebaseUser;

    $scope.messages.$add({
      text: $scope.newMessageText,
      current_time: new Date().toJSON()
    });
    $scope.newMessageText = null;
  };
你试过这个吗?你遇到过任何问题吗?

有关详细信息,请参阅here

答案 1 :(得分:0)

我在里面做了一些编辑,请试验一下,让我知道,我在等。我已将$ rootScope用于此场景,该场景作为角度中的全局变量出现。

  

注意:我正在编写此代码,预测您的现有代码是   完全正确。

app.controller(“ChatController”,函数($ scope,$ firebaseArray,$ timeout,$ firebaseAuth,$ window,$ rootScope){           var ref = firebase.database()。ref()。child(“messages”);           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;
          });

      };

    });