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 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
js 对象是否存在判断
Jul 15 Javascript
JS 显示当前日期与时间的代码
Mar 24 Javascript
解析Javascript小括号“()”的多义性
Dec 03 Javascript
jquery事件preventDefault()方法用法实例
Jan 16 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
JS实现的简单标签点击切换功能示例
Sep 21 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 jQuery
JavaScript函数定义方法实例详解
Mar 05 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
Apr 02 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 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伪静态的实现详细介绍
2013/04/28 PHP
PHP中的Memcache详解
2014/04/05 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
JavaScript常用工具函数大全
2020/05/06 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
深入讲解Python编程中的字符串
2015/10/14 Python
十个Python程序员易犯的错误
2015/12/15 Python
Python中类的初始化特殊方法
2017/12/01 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
应届毕业生就业自荐信
2013/10/26 职场文书
国际经济贸易专业推荐信
2013/11/06 职场文书
报告会主持词
2014/04/02 职场文书
实习生岗位职责
2014/04/12 职场文书
英语专业求职信
2014/07/08 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
工作检讨书500字
2014/10/19 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
部队个人年终总结
2015/03/02 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL