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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
Apr 19 Javascript
jQuery实现当前页面标签高亮显示的方法
Mar 10 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
Jan 19 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
Mar 06 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
vue滚动tab跟随切换效果
Jun 29 Javascript
Vue触发隐藏input file的方法实例详解
Aug 14 Javascript
vue实现标签云效果的方法详解
Aug 28 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 Javascript
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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
pycharm 批量修改变量名称的方法
2019/08/01 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
Python tornado上传文件的功能
2020/03/26 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
捷克玩具商店:Bambule
2019/02/23 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
幼儿园新学期寄语
2014/01/18 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
师德演讲稿范文
2014/05/06 职场文书
企业宗旨标语
2014/06/10 职场文书
营销学习心得体会
2014/09/12 职场文书
委托公证书格式
2015/01/26 职场文书
母亲节寄语大全
2015/02/27 职场文书
交通安全温馨提示语
2015/07/14 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL