我正在构建我的第一个移动应用程序,使用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)
};
}
答案 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;
})
},