我正在尝试理解为什么此代码执行警报()3次:
$scope.logout = function () {
$rootScope.auth.$logout();
$rootScope.$on('$firebaseSimpleLogin:logout', function(event) {
alert("Logged out"); // This appears 3 times.
});
}
但这只是一个:
$scope.logout = function () {
$rootScope.auth.$logout();
alert("Logged out"); // This JUST appears once.
}
据我所知,第二种方法是直接的;首先执行一行,然后执行另一行。但是,如果$ logout失败并且应用程序显示操作成功,那么该怎么办呢?由于这种可能性,我正在使用$firebaseSimpleLogin:logout
事件来正确处理这种情况。可悲的是,它没有像我想象的那样工作。
可能有什么不对?
答案 0 :(得分:1)
很难说没有看到应用程序的其余部分,但是有一个错误:在第一个代码示例中,每次调用$scope.logout
时都会附加另一个事件侦听器 - 例如,如果您调用两次,下次事件发生时它会发出警报两次。再次单击它,下次事件触发时,您将收到三个警报。您应该在函数调用之外移动事件侦听器的注册:
// put this anywhere that's only called once
app.run(function($rootScope) {
$rootScope.$on("$firebaseSimpleLogin:logout", ...);
});
// elsewhere
$scope.logout = function() {
$rootScope.auth.$logout();
};
// You could also unregister the function when you're done with it instead
app.controller("AuthController", function($scope, $rootScope) {
var unregListener = $rootScope.$on("$firebaseSimpleLogin:logout", ...);
$scope.$on("$destroy", unregListener);
$scope.logout = function() { ... };
});