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 相关文章推荐
JavaScript浏览器选项卡效果
Aug 25 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
JQuery性能优化的几点建议
May 14 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
深入理解ECMAScript的几个关键语句
Jun 01 Javascript
微信小程序 icon组件详细及实例代码
Oct 25 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
JointJS流程图的绘制方法
Dec 03 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 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
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python Socket传输文件示例
2017/01/16 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
python requests 使用快速入门
2017/08/31 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python脚本实现验证码识别
2018/06/07 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
为什么会有内存对齐
2016/10/10 面试题
行政专员岗位职责说明书
2014/09/01 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
工作年限证明模板
2014/11/01 职场文书
社区端午节活动总结
2015/02/11 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android