gpt4 book ai didi

javascript - 无法从另一个 Controller 访问 $rootScope

转载 作者:行者123 更新时间:2023-12-02 16:29:55 26 4
gpt4 key购买 nike

为什么我无法从 RegistrationController 访问 $rootScope,特别是 currentUser 对象和 signedIn() 函数?

我尝试按照教程示例进行操作,并且能够在服务(身份验证)中成功设置 $rootScope.currentUser 变量,但是当我尝试从另一个 Controller 访问它时(RegistrationController)我无法访问它。

我的理解是,$rootScope 是一种可以从所有应用程序访问的全局变量,这是正确的吗?

myApp.controller('RegistrationController', 
function($scope, $firebaseAuth, $location, Authentication, $rootScope){

$scope.login = function() {
Authentication.login($scope.user)
.then(function(userReturned){
console.log('registration.js: logged in user '+userReturned.uid);
//console.log('registration.js: $rootScope.currentUser ahora es... ');
//console.log($rootScope.currentUser);
$location.path('/meetings');
})
.catch(function(error) {
$scope.message = error.toString();
});
} //login


}); //RegistrationController

myApp.factory('Authentication',
function($firebase, $firebaseAuth, FIREBASE_URL, $location, $rootScope) {
// using $firebaseAuth instead of SimpleLogin

var ref = new Firebase(FIREBASE_URL);
var authObj = $firebaseAuth(ref);

var myObject = {
login : function(user) {

return authObj.$authWithPassword({
email: user.email,
password: user.password
})
.then(function(authData){
console.log('authentication.js: logged in user '+ authData.uid);

var userRef = new Firebase(FIREBASE_URL + 'users/' + authData.uid);
var userObj = $firebase(userRef).$asObject();

userObj.$loaded().then(function() {
$rootScope.currentUser = userObj;
});

$rootScope.$broadcast('$firebaseAuth:authWithPassword',authData); // avisa al scope

return authData;
});
}, //login

signedIn: function() {
//console.log(authObj);
//console.log('authentication.js: signedIn function called and returned '+ (authObj.user != null) );
return authObj.user != null;
} // signedIn

} //myObject

// add signedIn to the $rootScope
$rootScope.signedIn = function() {
return myObject.signedIn();
}

return myObject;
});

最佳答案

我相信发生的事情是在设置 currentUser 之前解决了 Authentication.login 的 promise $rootScope.currentUser = userObj;

为了确保这种情况,请尝试在身份验证服务中的这一行放置一个断点:

$rootScope.currentUser = userObj;

以及 Controller 中此断点的另一个断点:

console.log($rootScope.currentUser);

并查看哪一个在另一个之前执行。

如果是这种情况,请尝试以下操作:将 [THEN] 语句中的代码块从您的服务移至 Controller ,您将在 Controller 中处理当前用户并记录它。

关于javascript - 无法从另一个 Controller 访问 $rootScope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28398908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com