AngularJS - 事件监听器被触发两次

时间:2016-08-31 20:13:14

标签: angularjs authentication ionic-framework firebase firebase-authentication

我搜索了很多,但我无法找到解决问题的方法: 我是AngularJS的新手,我正在使用 Ionic with Firebase 来创建应用。我想屏蔽来自未经身份验证的用户的观看次数。因此,当用户点击未经身份验证的视图时,应弹出登录模式并将视图重定向到主页。

代码是这样的:

myApp.controller('AppCtrl', ['$scope','$ionicModal', $state,...,
function($scope, $ionicModal, $state,...) {

// Create the login modal that we will use later
  $ionicModal.fromTemplateUrl('templates/login.html', {
    scope: $scope
  }).then(function(modal) {
    $scope.modalLogin = modal;
  });

// Open the login modal
  $scope.login = function() {
    if(!$scope.modalLogin.isShown()){
      $scope.modalLogin.show();
    }  
  };

/*** Verify Authentication - This is the problematic part... ***/
  $scope.$on("$stateChangeStart", 
     function(event, toState, toParams, fromState, fromParams){
        var auth = firebase.auth();

    if (toState.views.menuContent.authenticate && auth.currentUser === null){
      event.preventDefault();
      // User isn’t authenticated
      if(fromState.name != "app.home"){
        $state.go("app.home");
      }
      if(!$scope.modalLogin.isShown()){
        $scope.login();
      }      
    }
    else{
      return;
    }
  });


}]);

问题在于,无论我做什么,$scope.$on("$stateChangeStart",)回调函数都会触发两次。我检查了双倍的控制器声明,我删除了$scope.login()函数,即使事件监听器为空,也会被触发两次:

//Verify Authentication
      $scope.$on("$stateChangeStart", 
         function(event, toState, toParams, fromState, fromParams){
            console.log('This fires twice...');   
         }

有什么想法?我是angularJS的新手,所以也许这是一个非常简单的解决方案,但我无法找到它。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这在过去发生在我身上,问题是因为角度加载了两次。我已经包含了角度脚本,离子包括角度脚本。

删除我们自己的角度脚本并让离子处理它是我的解决方案