Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 调用其他控制器';在爱奥尼亚的menu.html中的s方法_Angularjs_Ionic Framework - Fatal编程技术网

Angularjs 调用其他控制器';在爱奥尼亚的menu.html中的s方法

Angularjs 调用其他控制器';在爱奥尼亚的menu.html中的s方法,angularjs,ionic-framework,Angularjs,Ionic Framework,我使用的是ionic 1。My menu.html有如下内容: <ion-item menu-close ng-click="login()"> Login </ion-item> menu.html: <ion-item menu-close ng-click="LoginCtrl.login()"> Login </ion-item> login.js: angular.module('login', []) .controll

我使用的是ionic 1。My menu.html有如下内容:

<ion-item menu-close ng-click="login()">
  Login
</ion-item>
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');
});

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

<ion-item menu-close ng-click="login()">
  Login
</ion-item>
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');
});
menu.html:
登录
login.js:
模块('login',[]))
.controller('loginController',函数($scope){
var vm=这个;
vm.login=函数(){
控制台日志(“单击”);
}
});
app.js
.config(函数($stateProvider,$urlRouterProvider){
$stateProvider
.state('应用程序'{
url:“/app”,
摘要:没错,
templateUrl:'templates/menu.html',
控制器:“AppController”,
controllerAs:'AppCtrl'
})
.state('应用程序播放列表'{
url:“/播放列表”,
观点:{
“菜单内容”:{
templateUrl:'templates/playlists.html',
控制器:“播放列表控制器”,
controllerAs:“播放列表列表”
}
}
})
$urlRouterProvider。否则('/app/playlists');
});

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

您可以尝试
$parent
。 您可以访问父作用域,如下所示

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

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

alias.method()

您正在调用的方法必须在作用域中。e、 g.当一个控制器嵌套在另一个控制器中时,子控制器可以访问父方法。

如果没有更多信息,很难调试您的问题,这是所有代码@jarvis吗?嘿,我已经编辑了我的问题并添加了更多信息!我的问题是,我需要从父级调用子控制器的方法,而对于这一点,上述方法不起作用!!!