为什么要自定义控件?html的select 不是可以用么?以前我就是这么想的,当我接到特殊需求时,需要我自己写一个下拉控件。

这个需求就是将图表横向放大,由于H5不能控制设备转向,所以我将图表通过css控制顺时针旋转90度。这时设备还是竖屏的,所以即使你将select空间旋转90度,当你点击下拉选项时,会发现选项是竖屏展示的。(不管是Android还是ios 均对h5的select 进行优化,即不在是网页那种显示方式,而是下方出现选项的弹框)这样就不合适了。需要你去写个select 组件了。

由于我使用的是Angularjs ,所以组件需要使用指定(directive) 来完成,

 angular.module('app')
.directive('dropDown', [function () {
return {
restrict : 'EA',
replace : true,
transclude : true,
scope : {
selecttitle : '=', //// 默认选中值
lidata:'=lidata', //// 数据集如['张三','李四','王五']
clickChange:'&', //// 选项变化时事件
disabled:'@' //// 是否显示,支持表达式
},
template:'<div class="ddl" ng-show="disabled">'
+'<div class="ddlTitle" ng-click="toggle()"><span ng-bind="selecttitle"></span><i class="fa fa-angle-down ddli"></i></div>'
+'<ul ng-show="showMe">'
+' <li ng-repeat="data in lidata" ng-click="clickLi(\'{{data}}\')">{{data}}</li>'
+'</ul>'
+'</div>',
link: function ($scope, $element, $attrs) { $scope.showMe = false;
$scope.disabled = true; $scope.toggle = function toggle() {
$scope.showMe = !$scope.showMe;
}; $scope.clickLi=function clickLi(data_){
$scope.selecttitle=data_;
$scope.showMe = !$scope.showMe;
}; $scope.$watch('selecttitle', function(value) {
$scope.clickChange();
}); /*$scope.$watch( function() {
return $scope.$eval($attrs.setNgAnimate, $scope);
}, function(valnew, valold){
$animate.enabled(!!valnew, $element);
});*/
}
};
}]);

Angularjs 控制器代码

 app.controller('***Ctl',[function(){

     $scope.currentEnttiy={};
$scope.currentMetric=""; $scope.initPage = function() {
......
$scope.changeSelect();
} //// 下拉选项变化时触发
$scope.changeSelect=function(){
......
} $scope.initPage(); }];

Html代码

 <html>
<head>
<title>hello jackical</title>
</head>
<body> <drop-down selecttitle="currentMetric" lidata="currentEnttiy.metricNameList" click-Change="changeSelect()"></drop-down> </body>
</html>

css 样式

  .ddl{
position: relative;
padding:2px;
cursor: pointer;
background-color: #FAFAFA;
width:254px;
float: left;
}
.ddlTitle{
height: 40px;
line-height: 35px;
padding: 2px;
padding-left: 5px;
padding-right: 5px;
border: solid #cccccc 1px;
font-size: 13px;
}
.ddlTitle span{
margin-right: 10px;
color: #58D0E1;
padding-left: 5px;
}
.ddl ul li{
list-style:none;
border-top: dotted #cccccc 1px;
line-height: 40px;
padding-left: 5px;
}
.ddl ul{
position:absolute;
top:40px;
width:250px;
left:2px;
border: solid #cccccc 1px;
z-index:;
background-color: white;
padding:2px;
}
.ddli{
font-size: 20px;
float: right;
margin-top: 5px;
}

以上为实现代码片段。

附效果图:

转载请注明出处:http://www.cnblogs.com/jackicalSong/

OK ,代码己贴完。

Angularjs 自定义指令 (下拉菜单)的更多相关文章

  1. [k]自定义样式下拉菜单

    自定义样式下拉菜单-1 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> & ...

  2. angular 实现自定义样式下拉菜单

    自己闲着没事写了一个自定义的下拉菜单希望和大家交流一下!望能和大神们成为朋友. 下面上代码: <!doctype html> <html lang="en" ng ...

  3. 自定义 select 下拉菜单

    .selectBeautifyMainStyle{ color: #9fa0a0; font-size: 14px; font-family: "alegreya_sansthin" ...

  4. jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身)

    jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身) //点击非当前下拉菜单区域时,关闭下拉菜单 $(document).mousedown(function ...

  5. 【Android初级】如何实现一个有动画效果的自定义下拉菜单

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  6. JavaScript 多级联动浮动(下拉)菜单 (第二版)

    JavaScript 多级联动浮动(下拉)菜单 (第二版)   上一个版本(第一版请看这里)基本实现了多级联动和浮动菜单的功能,但效果不是太好,使用麻烦还有些bug,实用性不高.这次除了修改已发现的问 ...

  7. 针对angularjs下拉菜单第一个为空白问题处理

          angularjs 的select的option是通过循环造成的,循环的方式可能有  ng-option  或 者 <option  ng-repeat></option ...

  8. IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  9. iOS 下拉菜单 FFDropDownMenu自定义下拉菜单样式实战-b

    Demo地址:https://github.com/chenfanfang/CollectionsOfExampleFFDropDownMenu框架地址:https://github.com/chen ...

  10. android 自定义下拉菜单

    本实例的自定义下拉菜单主要是继承PopupWindow类来实现的弹出窗体,各种布局效果可以根据自己定义设计.弹出的动画效果主要用到了translate.alpha.scale,具体实现步骤如下: 先上 ...

随机推荐

  1. 从windows到linux的换行转换工具dos2unix

    同学们也许知道,windows中的文本文件的换行符是"\r\n",而linux中是"\n".由于换行符的不同,所以有的时候会发生一些莫名其妙的状况.至于具体什么 ...

  2. UVa 11584 - Partitioning by Palindromes(线性DP + 预处理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. BZOJ4887:[TJOI2017]可乐(矩阵乘法)

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  4. PHP 生成全局唯一id

    直接上代码: function generate_global_uniqid() { $prefix = md5(microtime(true)); // 生成唯一ID发生器 prefix,如果为服务 ...

  5. caffe 学习(3)——Layer Catalogue

    layer是建模和计算的基本单元. caffe的目录包含各种state-of-the-art model的layers. 为了创建一个caffe model,我们需要定义模型架构在一个protocol ...

  6. C#中Form的Paint事件响应方法与重载虚方法OnPaint()的区别

    Form_Paint()方法是Paint事件的响应方法,OnPaint是可重载的虚方法,OnPaint方法是调用Paint事件的,用哪一个,效果是一样,就看那一个方便了内部是这样实现的: protec ...

  7. MongoDB的角色作用(2)

    数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而MongoDB主打的就是海量数据架构, ...

  8. ARM v8-A 系列CPU的MMU隐射分析

    ARM v8-A 系列CPU的MMU隐射分析 摘要:V8-A系列CPU有ELX,X为0~3等4个异常级别,又有AArch64和AArch32两种执行状态,异常级别可以决定执行状态,而对应着执行状态,M ...

  9. qt+vs2005新建配置不自动加载Generated Files进工程(个人备份)

    工程右键Qt Project Settings 的Moc Directory路径删除 确定,再进入将删除路径加上

  10. SignalR 教程一

    转帖官方教程:Tutorial: Getting Started with SignalR 2 and MVC 5 http://www.asp.net/signalr/overview/gettin ...