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 相关文章推荐
Jquery 基础学习笔记
May 29 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
Mar 03 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
May 03 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
js中时间格式化的几种方法
Jul 22 Javascript
vue.js多页面开发环境搭建过程
Apr 24 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP中overload与override的区别
2017/02/13 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python通过索引遍历列表的方法
2015/05/04 Python
让python在hadoop上跑起来
2016/01/27 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
教学器材管理制度
2014/01/26 职场文书
校园文明倡议书
2014/05/16 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
出生公证书
2015/01/23 职场文书
法院执行局工作总结
2015/08/11 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
Python创建SQL数据库流程逐步讲解
2022/09/23 Python