我有以下使用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")
该浏览器将在浏览器中运行,但其中未显示任何其他console.log
命令$scope.createAccount
。
console.log($scope.auth)
在设置$scope.createAccount
功能之前,我拥有的命令显示了已$createUser
定义功能的有效对象。
我在运行时没有收到任何控制台错误,$scope.createAccount
因此我假设调用已“成功”进行。
为什么我可以看到auth对象,但是调用后却没有收到回调$createUser
?
发生这种情况是因为我正在基于JavaScript表示法而不是Angular表示法进行回调。由于我使用的是AngularFire方法(它们的名称与普通JavaScript SDK方法相同,但是$
在它们前面带有一个标志),因此我需要使用Angular的$promise
方法来处理回调。
我变了
$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
});
和回调工作按预期方式。
上面的例外是香草JSfirebaseSimpleLogin
构造函数与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
,则用户已登录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句