Ionic如何实现单选二级菜单切换
Ionic如何实现单选二级菜单切换
最近有个需求,需要做一个用户视图,数据全都从PC端系统实时取,由于这个功能在电脑浏览器展示还可以,即使菜单全部展开,只要美工稍加调整下位置也是放得下的,但是同样的功能让App也做一个就有问题了,尤其是课程体系切换里面有很多岗位菜单切换,而且是实时获取,如果在主页面显示会占用很大地方,影响用户体验,最终斟酌再三,将此菜单切换放在弹窗里面,就是点击一下弹个页面让用户选择,App页面宽度比较窄显示列表比较轻松,就做了个弹窗,需要说明的是这个弹窗点击一级菜单展开当前一级下面的二级菜单,点击二级菜单即是选择,然后关闭弹窗切换主页面内容。
这个功能有两个难点:
其一是ionic的模态框modal框貌似不能动态传参
其二是菜单切换需要单选,因为需要各一个right(打勾)标示当前项
对于第一个问题,我的解决方法是主页面初始化时将弹窗内的数据一次性获取放在local,后续用户点击单选项就直接从local的JavaScript切换,且等,这里需要强调的是,如果将获取数据放在用户点开弹窗时候,模态框很容易死掉!!!(这个问题只在获取数据时间比较长的时候),一定要记住,我可是填了n多坑ε(┬┬﹏┬┬)3才success...
第二个问题解决方法也很费力,大多数时候做个一级多选项单选切换十分容易,做个二级就困难重重啦,要知道ionic的item、ion-item、ion-list都是有语义,随便写的话 二级菜单不能显示 此功能就废掉了,啊啊啊~,还是上代码吧~
<!--默认课程体系切换-->
<script id="list/level.html" type="text/ng-template">
<ion-modal-view>
<ion-header-bar class="bar bar-header" style="background-color:#efefef;">
<h1 class="title" style="color:#7186a0;">课程体系</h1>
<button class="button button-icon ion-ios-close-empty" style="color:black;" ng-click="levelModal.hide()"></button>
</ion-header-bar>
<ion-content>
<ion-list class="mRecord-main-detail-level">
<!--层级-->
<label class="item item-radio" ng-repeat="stmt in courseSystem">
<!--ng-checked="stmt.cid==record.defaultCourseSystem.cid"-->
<input type="radio" name="group" ng-click="ChangeDom(stmt.oid)" ng-checked="checkValue==stmt.oid">
<div class="col-70 item-content" style="padding-top:10px;padding-bottom:10px;padding-left:10%">
<b>{{stmt.jc}}</b>
</div>
<img class="radio-icon ion-checkmark col-30" src="img/record/right.png" style="height:42px;padding-top:8px;padding-bottom:8px;padding-right:10%;">
<!--阶级-->
<!--ng-if="checkValue==stmt.cid"-->
<label ng-repeat="ss in stmt.contructioninfo" class="item item-radio"
style="padding-left:20%;border-top: 1px solid lightgrey"
ng-if="checkValue==stmt.oid" ng-click="changeCourseSystem(stmt,ss.jjId)"
>
<input type="radio" name="group-{{stmt.cid}}-{{$parent.$parent.$index}}" ng-checked="ss.jjId==checkValue2">
<div class="col-80 item-content" style="padding-top:7px;padding-bottom:7px;">
{{ss.jjName}}
</div>
<img class="radio-icon ion-checkmark" src="img/record/right.png" style="padding:3%;margin-right:3%;">
</label>
</label>
</ion-list>
</ion-content> <ion-footer-bar class="mlearning-foot" style="height:auto;">
</ion-footer-bar>
</ion-modal-view>
</script>
以上html需要点拨的是,一级的时候选项切换 radio是放在label里面的,一个套label就是一个选项,label需要在同一级,做二级单选的时候需要将一级选项的对应的二级选项全都放在当前一级label里面(而且是当前二级全部选项哦~),页面写好,做功能切换的时候必须要配合着JavaScript(点开一个展开一个,都不收起多难看啊~~~),还有就是css,不多说,各位自行调吧~,简单但费力不少。。。
下面我将实时的页面dom共享以及JavaScript切换部分的代码共享,希望正在使用ionic开发相似功能的童鞋少走弯路
/**
* 课程体系弹出框
*/
$ionicModal.fromTemplateUrl('list/level.html', {
scope: $scope,
animation: 'slide-in-up',
}).then(function (modal) {
$scope.levelModal = modal;
}); //获取课程体系列表数据
$scope.showLevel= function() {
$scope.courseSystem=[];
for(var item in $scope.record.allCourseSystem){
if($scope.record.allCourseSystem[item].css==1){//过滤掉未发布的
$scope.courseSystem.push($scope.record.allCourseSystem[item]);
}
}
$scope.checkValue=$scope.beforeId=$scope.record.defaultCourseSystem.oid;//先设置最初的层级id
$scope.checkValue2=$scope.record.defaultCourseSystem.jid;
$scope.levelModal.show();
}
//切换Dom
$scope.ChangeDom=function(val){
$scope.checkValue=val;
$scope.checkValue2=null;
}
//课程体系切换
$scope.changeCourseSystem=function(stmt,jId){
$scope.levelModal.hide();//隐藏
$scope.record.defaultCourseSystem=stmt;//切换默认级别
for(var i in stmt.contructioninfo){
if(stmt.contructioninfo[i].jjId==jId){
$scope.record.defaultCourseSystem.target=stmt.contructioninfo[i].target;//目标
$scope.record.defaultCourseSystem.ability=stmt.contructioninfo[i].ability;//能力
$scope.record.defaultCourseSystem.jjname=stmt.contructioninfo[i].jjName;//阶级名称
}
} //未切换不从数据库取数据
if($scope.beforeId==$scope.record.defaultCourseSystem.cid){
return;
}
request({jId:jId,oId:stmt.oid});
// $scope.$apply();//数据应用于界面
}
Ionic如何实现单选二级菜单切换的更多相关文章
- jquery垂直展开折叠手风琴二级菜单
摘要:jquery实现垂直展开二级菜单 最近新开发一个简单项目,用到左侧两级的菜单.找找了手头的文件,竟然没有现成的代码,算了,去网上找找整理下吧. 注:jquery-1.8.3.min.js需要下载 ...
- python 全栈开发,Day109(客户管理之动态"二级"菜单)
昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...
- JavaScript处理数据完成左侧二级菜单的搭建
我们在项目中应用的后台管理框架基本上都是大同小异,左侧是一个二级菜单,点击选中的菜单,右侧对应的页面展示.我把前端页面封装数据的过程整理了一下,虽然不一定适合所有的管理页面,仅作为案例来参考,只是希望 ...
- Excel——使用OFFSET、MATCH、COUNTA实现二级菜单
如图所示,接下来提供两种办法实现: 1.将A.B.C.D定义为名称NAME. 2.设置一级菜单单元格数据有效性为NAME. 3.设置二级菜单格数据有效为: =OFFSET($A$1,MATCH($A6 ...
- Jquery垂直下拉二级菜单
自己做了一个基于Jquery 的垂直下拉二级菜单功能,直接看图: Html的代码如下: <!DOCTYPE html> <html> <head> <meta ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- JS实现的简单横向伸展二级菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Bootstrap系列 -- 40. 导航条二级菜单
在导航条中添加二级菜单也非常简单 <div class="navbar navbar-default" role="navigation"> < ...
- JS-鼠标经过显示二级菜单
在css处添加了border样式为了看得更清楚——源代码有一个程序漏洞,存在一个很烦人的大bug. <ul class="nav"> <li class=&quo ...
随机推荐
- 【webpack】webpack-dev-server生猛上手——让我们来搭一个webpack的微服务器吧!
[前言]:因为最近在搞百度地图API的时候到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的"收尾工作"--即打包,而没有把它纳入到 ...
- Android面试题目2
1. 请描述下Activity的声明周期. onCreate->onStart->onRemuse->onPause->onStop->onRestart->onD ...
- ubuntu下配置Apache+mod_wsgi+Django项目(个人测试)
经过了一个星期的摸索,查找资料以及实验,我搭建的环境基本能用(还有就是Django后台的静态文件加载的问题) 这里面只是介绍一下我的过程,因为对应Apache还不是很熟练,特别是配置文件.只能供大家参 ...
- Chapter 3:Speech Production and Perception
作者:桂. 时间:2017-05-24 09:09:36 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 一. ...
- 在Caffe添加Python layer详细步骤
本文主要讨论的是在caffe中添加python layer的一般流程,自己设计的test_python_layer.py层只是起到演示作用,没有实际的功能. 1) Python layer 在caff ...
- NetCore1.1+Linux部署初体验
1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 https://www.asp.net/downloads注意勾选下.Net Core 3.Centaos安装netco ...
- thinkphp5.0学习笔记(三)获取信息,变量,绑定参数
1.构造函数: 控制器类必须继承了\think\Controller类,才能使用: 方法_initialize 代码: <?php namespace app\lian\controller; ...
- Linux网络编程“惊群”问题总结
1.前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬.如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进 ...
- 按bean的属性值对list集合进行排序
List根据对象的某个属性排序工具类 List排序 import java.util.Collections; import java.util.Comparator; import java.uti ...
- Kotlin基本语法和使用
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...