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 12 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
Jan 15 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 Javascript
jQuery改变form表单的action,并进行提交的实现代码
May 25 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
mui框架移动开发初体验详解
Oct 11 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
不得不知的ES6小技巧
Jul 28 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
Sep 19 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 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命名空间(namespace)的使用基础及示例
2014/08/18 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
Python中一行和多行import模块问题
2018/04/01 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
暑假实习求职信范文
2013/09/22 职场文书
传播学毕业生求职信
2013/10/11 职场文书
业务员岗位职责
2013/11/16 职场文书
村容村貌整治方案
2014/05/21 职场文书
中标通知书格式
2015/04/17 职场文书
雾霾停课通知
2015/04/24 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
浅析Python OpenCV三种滤镜效果
2022/04/11 Python
python单向链表实例详解
2022/05/25 Python