2017-08-24 189 views
0

我有兩個控制器的名字叫這樣的:如何調用一個控制器的功能,從另一個控制器AngularJs

  1. AutoLoginCtrl
  2. LoginCtrl

我的facebook目前在登錄控制器註銷功能,從自動登錄控制器我怎麼可以調用登錄控制器的註銷功能。

我以$ rootscope$上

LoginCtrl.js

ionApp.controller('LoginCtrl', function($scope, $state, $ionicModal, $rootScope, $q, $timeout, UserService, $ionicLoading, $ionicActionSheet) { 
 
$scope.showLogOutMenu = function() { 
 
    var hideSheet = $ionicActionSheet.show({ 
 
     destructiveText: 'Logout', 
 
     titleText: 'Are you sure you want to logout? This app is awsome so I recommend you to stay.', 
 
     cancelText: 'Cancel', 
 
     cancel: function() {}, 
 
     buttonClicked: function(index) { 
 
     return true; 
 
     }, 
 
     destructiveButtonClicked: function() { 
 
     $ionicLoading.show({ 
 
      template: 'Logging out...' 
 
     }); 
 

 
     // Facebook logout 
 
     facebookConnectPlugin.logout(function() { 
 
      $ionicLoading.hide(); 
 
      $state.go('login'); 
 
      }, 
 
      function(fail) { 
 
      $ionicLoading.hide(); 
 
      }); 
 
     } 
 
    }); 
 
    }; 
 

 
    $rootScope.$on("LogoutFunction", function(){ 
 
      $scope.parentmethod(); 
 
     }); 
 

 
})

AutoLoginCtrl

試圖這樣

+1

移動的退出代碼服務 –

+0

@D。西蒙,我們不能從控制器打電話嗎?,因爲我不想在這裏使用服務。 – Chandrashekhar

+0

那麼對於兩個視圖使用相同的控制器呢? –

回答

0

您決定使用$emit酸當量子控制器通知父控制器。這是真的嗎? AutoLoginCtrlLoginCtrl的孩子,或者您需要使用$broadcast來代替?

第二個問題可能是: 出於某種原因LoginCtrl還沒有加載和LogoutFunction事件沒人聽。


請檢查這些情況

+0

主席先生,對此,如果控制器之間沒有父子關係,我怎樣才能調用另一個控制器的功能? – Chandrashekhar

+0

@Chandrashekhar兩個控制器應該是活着的,以使其工作。看看這個例子:http://jsfiddle.net/9Ymvt/714/。嘗試將'$ emit'改爲'$ broadcast'或者像D. Simon所說的那樣使用服務 –

0

你可以做一個公共類(提供者可能),並從「的LoginController」
做一個函數在它調用一個函數退出()「,並呼籲該供應商功能在您的'自動登錄'控制器中

0

您可以在工廠擁有註銷功能並從兩個控制器調用它,如下所示。

廠基本演示:here

代碼:

ionApp.controller('LoginCtrl', function($scope, $ionicModal, $rootScope, $q, $timeout, UserService, SharedService) { 
$scope.showLogOutMenu = function() { 
    SharedService.logout(); 
    }; 

}).factory('SharedService', function ($ionicActionSheet, $ionicLoading, $state) { 
    return { 
    logout: function() { 
     var hideSheet = $ionicActionSheet.show({ 
     destructiveText: 'Logout', 
     titleText: 'Are you sure you want to logout? This app is awsome so I recommend you to stay.', 
     cancelText: 'Cancel', 
     cancel: function() {}, 
     buttonClicked: function(index) { 
      return true; 
     }, 
     destructiveButtonClicked: function() { 
      $ionicLoading.show({ 
      template: 'Logging out...' 
      }); 

      // Facebook logout 
      facebookConnectPlugin.logout(function() { 
       $ionicLoading.hide(); 
       $state.go('login'); 
      }, 
      function(fail) { 
       $ionicLoading.hide(); 
      }); 
     } 
     }); 
    } 
    } 
}).controller('AutoLoginCtrl', function($scope, $ionicModal, $rootScope, $q, $timeout, UserService, SharedService) { 
    var checkPage = "home"; 
$scope.logout = function() { 
    SharedService.logout(); 
    } 
}); 
相關問題