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 相关文章推荐
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
Ext grid 添加右击菜单
Nov 26 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
LABjs、RequireJS、SeaJS的区别
Mar 04 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
layui表格内放置图片,并点击放大的实例
Sep 10 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
js里的prototype使用示例
2010/11/19 Javascript
jQuery操作input值的各种方法总结
2013/11/21 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
python的mysqldb安装步骤详解
2017/08/14 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python代码注释规范代码实例解析
2020/08/14 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
CSS3 实现的加载动画
2020/12/07 HTML / CSS
数字漫画:comiXology
2020/06/13 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
教师岗位职责
2013/11/17 职场文书
实习教师自我鉴定
2013/12/12 职场文书
天猫活动策划方案
2014/08/21 职场文书
邀请函的格式
2015/01/30 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers