CreateUser函数在AngularFire中不起作用- Firebase简单登录



我有以下使用AngularFire的控制器

app.controller("authController", function($scope, $firebaseSimpleLogin){
var ref = new Firebase("https://myapp.firebaseIO.com/");
$scope.auth = $firebaseSimpleLogin(ref, function(error, user){
    if(error){
        console.log(error);
    }
    else if(user){
        console.log(user);
    }
    else{
        console.log("user logged out");
    }
});
// This shows a valid object
console.log($scope.auth);
$scope.createAccount = function(){
    console.log("found me");
    $scope.auth.$createUser($scope.email, $scope.password, function(error, user){
        console.log("something");
        console.log(user);
        if(!error){
            console.log(user);
        }
        else{
            console.log(error);
        }
    });
};
});

当我将$scope.createAccount函数绑定到ng-click事件并单击绑定按钮时,console.log("found me")在浏览器中运行,但$scope.createAccount中的其他console.log命令均未显示。

设置$scope.createAccount函数之前的console.log($scope.auth)命令显示了定义了$createUser函数的有效对象。

当我运行$scope.createAccount时,我没有收到任何控制台错误,所以我假设调用已经"成功"进行。

为什么我可以看到auth对象,但在调用$createUser后没有收到回调?

之所以会发生这种情况,是因为我是基于JavaScript而不是Angular的标记来做回调的。由于我使用的是AngularFire方法(它们的名称与普通JavaScript SDK方法相同,但在它们前面有一个$标志),我需要使用Angular的$promise方法来处理回调。

I changed

$scope.auth.$createUser($scope.email, $scope.password, function(error, user){
    // do things;
});

$scope.auth.$createUser($scope.email, $scope.password)
    .then(function(user){
        // do things if success
    }, function(error){
        // do things if failure
    }); 

和回调按预期工作。

在JS的firebaseSimpleLogin构造函数和Angular的$firebaseSimpleLogin构造函数之间有一个例外。在普通的JS构造函数中,构造函数上有回调函数,允许您指定当用户登录/注销时脚本应该做什么。它遵循以下格式:

var auth = new firebaseSimpleLogin(ref, function(error, user){
    if(error){
        // do things if login failure
    }
    else if(user){
        // do things when login succeeds 
    }
    else{
        // do things when user logs out
    }
});

如果你想对Angular的构造函数做同样的事情,像这样:

$scope.auth = $firebaseSimpleLogin(ref)
    .then(function(user){
        // do things when login succeeds 
    }, function(error){
        // do things when login fails     
    });

您将收到一个错误。Angular构造函数中没有回调方法。我猜这是有目的的,因为在Angular中,你有数据绑定,你可以简单地$watch $scope.auth.user进行更改,并根据变量的状态在你的应用程序中执行操作。当"$scope.auth.user"设置为"null"时,表示注销该用户。如果该值设置为null以外的任何值,则用户登录。

相关内容

  • 没有找到相关文章

最新更新