为什么要自定义控件?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. 使用mysli防止sql注入

    自从 php5 推出 mysqli 后就开始不提倡使用 mysql_ 开头的接口了,现在使用 mysql_connet 通常调试的时候会报警告说这个不该用 mysqli 使用起来其实更简单 $url ...

  2. Oracle 12c logminer测试

    首先开启归档:SQL> archive log list   Database log mode              Archive ModeAutomatic archival     ...

  3. Oracle RAC和SCAN同时对外提供服务的配制方法

    1,  tnsnames.ora on two nodes:RACTEST =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = racsca ...

  4. hdu 6216 A Cubic number and A Cubic Number【数学题】

    hdu 6216 A Cubic number and A Cubic Number[数学] 题意:判断一个素数是否是两个立方数之差,就是验差分.. 题解:只有相邻两立方数之差才可能,,因为x^3-y ...

  5. luogu P3941 入阵曲

    嘟嘟嘟 这道题我觉得跟最大子矩阵那道题非常像,都是O(n4)二维前缀和暴力很好想,O(n3)正解需要点转化. O(n4)暴力就不说啦,二维前缀和,枚举所有矩形,应该能得55分. O(n3)需要用到降维 ...

  6. nssm 在windows上部署服务

    简介 NSSM是一款可将Nodejs项目注册为Windows系统服务的工具.当你的Node.js项目需要部署在Windows Server上时,NSSM是一个不错的选择. 特点 NSSM将Node.j ...

  7. Python re模块正则表达式

  8. Spring Boot Web Error Page处理

    spring Boot默认是whitelabel error page. 其实我们可以自己处理,由于时间有限,所以就简单说明一下方法. 首先配置 @Configuration public class ...

  9. PAT——1018. 锤子剪刀布

    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N( ...

  10. SignalR 教程二 服务端广播

    转帖官方教程:Tutorial: Server Broadcast with SignalR 2 http://www.asp.net/signalr/overview/getting-started ...