$ location.path第一次无法使用Ionic / Firebase

时间:2016-07-10 21:53:39

标签: angularjs ionic-framework

我正在构建我的第一个移动应用程序,使用Ionic.io(版本1)和Firebase(最新版本,我相信3)用于数据库。我正在尝试设置注册页面,以便在注册成功后,该网站会将您重定向到另一个页面以填写您的个​​人资料。但是,当我点击注册按钮时,虽然用户已成功创建,但$ location.path('...')不执行任何操作(尽管“重定向”确实显示在控制台中,请参见下文)。第二次单击时,它会按预期重定向页面。

我尝试了几件事,包括引入$ scope。$ apply,因为我认为你不能在服务/工厂内使用$ scope,这非常错误。我也尝试在路径的前面附加一个#。使用$ location.url()也无济于事。我设法通过引入超时来解决问题,但这感觉有点hacky - 为什么会出现这个问题,是否有更好的解决方案?

谢谢!

服务:

signupEmail: function(newEmail, newPassword, newType) {
            var user;
                    firebase.auth().createUserWithEmailAndPassword(newEmail, newPassword)
                        //{email: newEmail,
                        //password: newPassword,}
                    .then(function(success) {
                        console.log("Successfully signed up!");
                        console.log(success);
              user = firebase.auth().currentUser;
              console.log("User....")
              console.log(user)
            }).then(function() {
              firebase.database().ref('users/' + user.uid).set({
                type: "..."
              })    
              console.log("Redirecting...");
              $timeout(function(){ 
                $location.path("/profile"); 
              },0);
            })
                    .catch(function(error) {
                        console.log(error.code)
                        console.log(error.message)
                    })
                },

控制器:

function SignupCtrl($scope, AuthService) {
    $scope.data = {};

    $scope.createUser = function() {
        var newEmail = $scope.data.email;
        var newPassword = $scope.data.password;
        var newType = $scope.data.type;
        AuthService.signupEmail(newEmail, newPassword, newType)
    };
}

1 个答案:

答案 0 :(得分:1)

AuthService.signupEmail(newEmail, newPassword, newType)
 .then(function(_user) {
    $state.go('profile', _user )
 }, function(_error) {
    console.log(_error)
 });

让服务返回承诺......

signupEmail: function(newEmail, newPassword, newType) {
     var user;

     return firebase.auth().createUserWithEmailAndPassword(newEmail, newPassword)
          .then(function(success) {
              console.log("Successfully signed up!");
              console.log(success);
              user = firebase.auth().currentUser
              return user; 
           }).then(function(_user) {
               firebase.database().ref('users/' + user.uid).set({})
               return user;
           })
    },