Ionic-1中menu-close指令失效,能否在控制器中调用该指令?
解决Ionic 1侧边菜单点击后无法关闭的问题
我来帮你搞定这个Ionic 1里侧边菜单的问题,同时解答你关于控制器中操作菜单关闭的疑问:
首先先看你的HTML代码,发现一个小错误:第二个<ion-side-menu>标签应该是闭合标签</ion-side-menu>,这个DOM结构错误可能会导致菜单的指令无法正常工作,先把这个修复了再说。
接下来回到你的核心问题:点击菜单选项功能正常,但菜单不关闭,以及能不能在控制器里操作menu-close相关的功能。
方法一:让menu-close指令正常生效
你已经在ion-item上添加了menu-close指令,但可能因为指令顺序或者事件绑定的问题没触发。可以试试下面的调整:
- 把
menu-close放在事件绑定的前面,或者改用ng-click代替on-touch(Ionic的menu-close和ng-click的兼容性更好):
<ion-side-menus enable-menu-with-back-views="false"> <ion-side-menu side="left"> <ion-content> <ion-list> <ion-item class="item item-icon-left" menu-close ng-click="vm.goSechemeList()"> <i class="icon ion-document-text"></i> {{'SCHEMES' | translate }} </ion-item> </ion-list> </ion-content> </ion-side-menu> <!-- 这里修复了闭合标签 --> </ion-side-menus>
menu-close指令本身就是用来在点击元素时自动关闭对应侧边菜单的,只要DOM结构正确,这个调整后应该能正常工作。
方法二:在控制器中手动控制菜单关闭(替代menu-close的方案)
menu-close是一个DOM指令,你没法直接在控制器里“访问”这个指令,但可以通过Ionic提供的$ionicSideMenuDelegate服务来手动控制菜单的开闭,这是控制器中操作菜单的标准方式。
步骤如下:
- 给控制器注入
$ionicSideMenuDelegate服务 - 在你的
goSechemeList方法中调用closeLeft()(关闭左侧菜单)或者toggleLeft()(切换菜单状态)
修改后的控制器代码:
// 确保控制器注入了$ionicSideMenuDelegate angular.module('yourAppModule').controller('YourController', [ '$log', 'Analytics', '$state', '$ionicSideMenuDelegate', function($log, Analytics, $state, $ionicSideMenuDelegate) { var vm = this; vm.goSechemeList = goSechemeList; function goSechemeList () { $log.log('click scheme list'); Analytics.trackEvent(Track.Secure_schemelist); // 手动关闭左侧侧边菜单 $ionicSideMenuDelegate.closeLeft(); $state.go('secure.layout.schemes'); } } ]);
这样不管menu-close有没有生效,控制器里的代码都会强制关闭左侧菜单,彻底解决你的问题。
额外检查点
确认你的ion-side-menus配置enable-menu-with-back-views="false"是符合需求的,这个属性的作用是在带有返回按钮的页面禁止打开侧边菜单,和当前菜单关闭的问题无关,所以没问题。
内容的提问来源于stack exchange,提问作者Ragu
相关产品推荐
相关产品推荐

