Angularjs单选改为多选的开发过程及问题解析


Posted in Javascript onFebruary 17, 2017

很简单的需求:之前下拉框是单选,现在想改为多选。

开发过程:

问题一:自己首先想到的是网上找个example,发现貌似AngularJS有相应的js包来实现,其中最多的就是isteven-multi-selectangularjs-dropdown-multiselect等。

我下载了,但是套到自己项目里面,是在是难看的很。而且貌似这些js包耦合性很高,不是我想要的那种,所以还是打算用简单的md-select、md-option、md-checkbox

来实现我想要的效果,又不想写的太人工,所以就查angularjs的一些控件demo,最后果然发现了我想要的。

https://material.angularjs.org/1.1.3/demo/select

于是我就开始往项目里套,但是怎么套,都出不了demo上的样式,多选是能多选了,但是没有像checkbox那种正方形选择框,各种百度各种google,就是不知道什么原因。本来打算都要放弃了,但是这么好的demo,这么省事的js,不忍心放弃啊,再说放弃也找不到其他比较合适的而又不显突兀的样式。于是耐下心来一遍遍的去看setting,所有的都没问题,除了版本不一致。难道?我的第六感告诉我,或许真的是版本原因。之前用的版本是"angular-material": "1.0.0-rc2",改用最新版本"angular-material": "1.1.3",于是,效果出来了,真的是版本原因,容我默默的在卫生间哭一会儿。

问题二:样式的问题解决了,离成功不远了。想做个多选效果,因为选项实在是很多,没有多选实在是体验不好。于是就用其中的一个option来做全选,但是不知道option都有什么事件,找不到相应的属性说明文档,只有一个checked属性,但是在js里面又不知道如何判断checked还是没有checked,最后还是放弃了,最上面做了个按钮,搞定。

问题三:还有个问题,就是更新"angular-material": "1.1.3"版本之后,似乎md-input-Container label长度过长的话,就显示3Dot(...)了,而之前是可以换行显示的,感觉这个体验完全不如之前版本的体验。网上google了好久也没google出来这样修正的好处,于是果断自定义css,改回原来的样式。

涉及到的部分代码:

html:

<md-input-container flex="35" class="md-input-has-value"> 
                    <label>产品类型</label> 
                    <md-select ng-model="params.productType" md-on-close="clearSearchTerm()" ng-change="change(params.productType)" data-md-container-class="selectHeader" multiple> 
                      <div> 
                        <button ng-click="pTCheckNone()" class="md-button md-ink-ripple"><i class="zmdi zmdi-undo ng-scope"></i>重置</button> 
                      </div> 
                      <md-select-header class="select-header"> 
                        <input ng-model="searchTerm" type="search" placeholder="Search for a product.." class="header-searchbox md-text" > 
                      </md-select-header> 
                      <md-optgroup label="productTypes"> 
                        <md-option value="{{item.key}}" ng-repeat="item in productTypes | filter:searchTerm">{{item.value}}</md-option> 
                      </md-optgroup> 
                    </md-select> 
                  </md-input-container>

js:

$scope.productTypes = [ 
   {"key":"SecureSiteProEV1", "value":"product1"}, 
   {"key":"SecureSiteProEV2", "value":"product2"}, 
   {"key":"SecureSiteProEV3", "value":"product3"}, 
   {"key":"SecureSiteProEV4", "value":"product4"}, 
   {"key":"SecureSiteProEV5", "value":"product5"}];

css

md-input-container label:not(.md-no-float):not(.md-container-ignore), 
md-input-container .md-placeholder { 
  white-space: normal; 
}
Javascript 相关文章推荐
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 Javascript
js 控制图片大小核心讲解
Oct 09 Javascript
js文件Cookie存取值示例代码
Feb 20 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
Mar 02 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
javascript高仿热血传奇游戏实现代码
Feb 22 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 Javascript
vue实现省市区联动 element-china-area-data插件
Apr 22 Vue.js
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 #Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 #Javascript
数组Array的排序sort方法
Feb 17 #Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 #Javascript
数组Array的一些方法(总结)
Feb 17 #Javascript
深入理解javascript的getTime()方法
Feb 16 #Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 #Javascript
You might like
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
python中map()函数的使用方法示例
2017/09/29 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
Why we need EJB
2016/10/20 面试题
中专生自我鉴定范文
2014/02/02 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
护士自我推荐信范文
2015/03/24 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python
Django框架中模型的用法
2022/06/10 Python