在menu.html中调用不同的控制器方法in ionic

时间:2017-09-08 05:04:56

标签: angularjs ionic-framework

我正在使用离子1.我的menu.html有这样的东西:

<ion-item menu-close ng-click="login()">
  Login
</ion-item>

这个login()方法在AppCtrl中。 我想要的是我将这个登录方法转移到一个LoginCtrl,它不会有login.html(因为我只提供谷歌登录)并直接进行谷歌登录。那么我该怎么做呢:

menu.html:

<ion-item menu-close ng-click="LoginCtrl.login()">
  Login
</ion-item>

login.js:

angular.module('login', [])
.controller('loginController', function($scope) {
  var vm=this;
  vm.login = function(){
    console.log("click");
  }
});

app.js

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state('app', {
   url: '/app',
   abstract: true,
   templateUrl: 'templates/menu.html',
   controller: 'AppController',
   controllerAs: 'AppCtrl'
  })
  .state('app.playlists', {
   url: '/playlists',
   views: {
    'menuContent': {
      templateUrl: 'templates/playlists.html',
      controller: 'PlaylistsController',
      controllerAs: 'PlaylistsCtrl'
    }
   }
  })
  $urlRouterProvider.otherwise('/app/playlists');
});

3 个答案:

答案 0 :(得分:1)

你可以尝试$parent。 您可以按如下方式访问父作用域

//This assigns the RESULT of login() to $scope.test
$scope.test= $scope.$parent.login();

答案 1 :(得分:0)

如果我理解正确,我相信您需要指定var vm = $scope.LoginCtrl = this。这样,ng-click具有正确的触发方法,因为它当前未分配给登录功能。

答案 2 :(得分:0)

您应该使用controllerAs语法为每个控制器提供别名。然后,您可以按如下方式调用任何方法:

alias.method()

您正在调用的方法必须在范围内。例如如果控制器嵌套在另一个控制器中,则子控制器可以访问父方法。