Angularjs 调用其他控制器';在爱奥尼亚的menu.html中的s方法
我使用的是ionic 1。My menu.html有如下内容: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
<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吗?嘿,我已经编辑了我的问题并添加了更多信息!我的问题是,我需要从父级调用子控制器的方法,而对于这一点,上述方法不起作用!!!