用户使用用户名、电子邮件和密码进行注册。我通过电子邮件使用 FirebaseSimpleLogin 进行身份验证,获取用户 ID,然后使用用户 ID 加载我的用户:
var ref = new Firebase(FIREBASE_URL + 'users'); // data containing user information
var users = $firebase(ref);
$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) { // wait until authenticated
var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid)); // find user by uid
query.$on('loaded', function () {
setCurrentUser(query.$getIndex()[0]); // get username from query
});
});
function setCurrentUser (username) {
$rootScope.currentUser = User.findByUsername(username);
}
现在,我的问题是,如果我在 HomeCtrl 中登录,我想重定向到用户个人资料页面:
app.controller('HomeCtrl', function ($rootScope, $scope, $location, Auth, User) {
// wait for current user to be set
// if signed in
// location.path('/user/' + currentUser.username);
});
不幸的是,我不确定如何等到 setCurrentUser 函数完成后再重定向。有没有办法让我的控制器中的一个功能等到其他功能完成?
我有一个解决方法,但我很确定这不是正确的方法。现在,我正在观察要更新的用户变量,然后在它更改为用户后调用所有函数,如下所示:
$scope.$watch(
function() { return $rootScope.currentUser }, // watch for variable to change
function() {
if ($rootScope.currentUser) { // if the current user is defined, change path
$location.path('/users/' + $rootScope.currentUser.username);
}
}
)