如何从另一个控制器AngularJs调用一个控制器的功能

时间:2017-08-24 07:52:03

标签: angularjs ionic-framework

我有两个名为的控制器名称:

  1. AutoLoginCtrl
  2. LoginCtrl
  3. 登录控制器中存在我的facebook登出功能,来自AutoLogin控制器如何调用登录控制器的登出功能。

    我尝试使用 $ rootscope $ on

    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

    ionApp.controller('AutoLoginCtrl', function($scope, $state, $ionicModal, $rootScope, $q, $timeout, UserService, $ionicLoading, $ionicActionSheet) {
      var checkPage = "home";
    $scope.logout = function() {
      	 $rootScope.$emit("LogoutFunction", {});
      }
    })

3 个答案:

答案 0 :(得分:0)

您决定使用$emit a.e.子控制器通知父控制器。这是真的吗? AutoLoginCtrlLoginCtrl的孩子,或者您可能需要使用$broadcast

第二个问题可能是: 出于某种原因LoginCtrl仍未加载,且没有人收听LogoutFunction事件。

请检查这些案例

答案 1 :(得分:0)

你可以创建一个公共类(Provider Maybe)并在其中创建一个函数来调用函数' Logout()'来自' LoginController'
并在您的“自动登录”中调用此提供商功能。控制器

答案 2 :(得分: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();
  }
});