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 直接操作本地文件的实现代码
Dec 01 Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 Javascript
Javascript实现禁止输入中文或英文的例子
Dec 09 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
javascript深拷贝(deepClone)详解
Aug 24 Javascript
利用jquery禁止外层滚动条的滚动
Jan 05 Javascript
AngularJS Controller作用域
Jan 09 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
Vue监听事件实现计数点击依次增加的方法
Sep 26 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
微信小程序封装自定义弹窗的实现代码
May 08 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
如何给phpadmin一个保护
2006/10/09 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
PHP四大安全策略
2014/03/12 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
node文字生成图片的示例代码
2017/10/26 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Django URL传递参数的方法总结
2016/08/28 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
python实现简单日期工具类
2019/04/24 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
高中自我评价分享
2013/12/05 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
高二物理教学反思
2014/02/08 职场文书
七夕活动策划方案
2014/08/16 职场文书
思想工作总结范文
2015/08/12 职场文书