2017-03-18 17 views
0

这是一个控制器,我从firebase获取一些数据并更新我的范围,然后我想做更多的东西一旦该范围更新:

.controller('loginCtrl', ['$scope','$firebaseAuth','$firebaseObject','$location', 
'localStorageService','$q', 
function($scope,$firebaseAuth,$firebaseObject,$location, 
    localStorageService,$q) { 

// Called 
$scope.googleAuth = function(){ 
    var auth = $firebaseAuth(); 

    auth.$signInWithPopup("google").then(function(firebaseUser){ 
     // Google approved 

     // Step 1. Get user profile 
     getProfile(firebaseUser); 
    }).catch(function(error){ 
     console.log("Authentication failed:",error); 
     $scope.errorMsg = "Something went wrong. Please try again." 
    }); 
} 

// Watchers 
$scope.$on('profile',function(){ 
    console.info("REACH"); 
    if($scope.profile == null){ // User doesn't exist 
     console.info("profile null"); 
     if(isAssigned(firebaseUser) != null){ 
      // Redirect to create a profile page 
     } else { 
      // Do not let them in TODO: adjust the text 
      $scope.erorrMsg = "It seems you don't have a profile. Please contact us on ----------- to get a profile"; 
     } 
    } else { 
     // Step 2. Get user parent info 
     // getParent($scope.profile.current_centre_id,$scope.profile.refer_id); 
     console.info("Getting parent"); 
     getParent('-KeVj_sr-uCY3zx0kbb6','-KeVpUA4OIK4msNIl0gQ'); 
    } 
}); 

// After getting parent info 
$scope.$on('parent',function(){ 
    localStorageService.set('currentUser',{ 
     profile: $scope.profile, 
     parent: $scope.parent 
    }); 
}); 

var getProfile = function(firebaseUser){ 
    var email = firebaseUser.user.email; 
    var ref = firebase.database().ref(); 
    // Getting profile 
    $scope.profile = $firebaseObject(ref.child('profiles').orderByChild('email').equalTo('[email protected]')); 
} 

var getParent = function(centre_id,parent_id){ 
    $scope.parent = $firebaseObject(ref.child('parents/'+centre_id+'/'+parent_id)); 
} 

var isAssigned = function(firebaseUser){ 
    // TODO 
    return false; 
} 

}]);

$scope.$on('profile') & $scope.$on('parent')没有被触发,我不知道为什么或我错过了什么。

我知道$scope.profile正在设置,因为我在html中打印它。

+0

要观察范围变量,请使用$ watch而不是$ on。 –

回答

2

而不是$scope.$on,使用$scope.$watch来观察范围变量。

$scope.$watch("scope_variable_name", function(newVal, oldVal){ 
    // Add your code here 
}); 
相关问题