基于angular实现三级联动的生日插件


Posted in Javascript onMay 12, 2017

写了一个生日联动插件具体的效果是这样的:

具体的数据

我取得数据是今年的数据,如果是想要做三级联动的日期插件,改一下时间就好了

var app=angular.module("dataPicker",[])

app.factory('dataPicker', ['$http', '$q', function ($http, $q) {
  return {
   query: function () {
    var lengthYear=100;
    var dataPicker={
     month:[],
     year:[],
     day:[]
    };
    var data = new Date();
    var nowyear = data.getFullYear();
    for(var i=nowyear,j=0; i>nowyear-lengthYear;i--,j++){
     dataPicker.year[j]=i;
    }
    for(var i=0;i<=11;i++){
     if(i<9){
      dataPicker.month[i]='0'+(i+1);
     }else{
      dataPicker.month[i]=String(i+1);
     }
    }
    return dataPicker;
   }
  }
 }])

directive插件的主要内容

app.directive('selectDatepicker', function ($http,dataPicker) {
  return {
   restrict: 'EAMC',
   replace: false,
   scope: {
    birthday: '=birthday'
   },
   transclude: true,
   template: '<span>生日</span>'+
    '<select class="sel_year" ng-model="birY" ng-change="changeYear()"><option ng-repeat="x in yearAll">{{x}}</option></select>'+
    '<select class="sel_month" ng-model="birM" ng-change="changeMonth()" ng-disabled="birY==\'\'"><option ng-repeat="x in MonthAll">{{x}}</option> </select>'+
    '<select class="sel_day" ng-model="birD" ng-disabled="birM==\'\'" ng-change="changeDay()"><option ng-repeat="x in DayAll">{{x}}</option></select>',
   link: function (scope, element){
    var arr=[];
    scope.birthday=scope.birthday=='0000-00-00'?"":scope.birthday
    var shuju=dataPicker.query()
    scope.yearAll=shuju.year;
    scope.MonthAll=shuju.month;
    if(scope.birthday){
     scope.birY=scope.birthday.birthday.split('-')[0];
     scope.birM=String(scope.birthday.birthday.split('-')[1])
    }else{
     scope.birY="";
     scope.birM="";
    }
    scope.getDaysInOneMonth=function(year, month){
     var month1 = Number(month);
     month1=parseInt(month1,10)
     var d= new Date(Number(year),month1,0);
     return d.getDate();
    }
    scope.getDayArr=function(day){
     shuju.day=[];
     for(var i=0; i<day;i++){
      if(i<9){
       shuju.day[i]='0'+(i+1)
      }else{
       shuju.day[i]=String((i+1));
      }
     }
    }
    if(scope.birthday){
     var day=scope.getDaysInOneMonth(scope.birthday.birthday.split('-')[0],scope.birthday.birthday.split('-')[1]);
     scope.getDayArr(day)
     scope.DayAll=shuju.day;
     scope.birD=scope.birthday.birthday.split('-')[2]
    }
    scope.changeYear=function(){
     scope.birD="";
     scope.birM="";
    }
    scope.changeMonth=function(){
     var day=scope.getDaysInOneMonth(scope.birY,scope.birM);
     console.log(day)
     scope.getDayArr(day);
     scope.DayAll=shuju.day;
     scope.birD="";
    }
    scope.changeDay=function(){
     scope.returnDate();
    }
    scope.returnDate=function(){
     if(!scope.birD||!scope.birY||!scope.birM){
      scope.birthday.returnValue="";
     }else{
      arr[0]=scope.birY;
      arr[1]=scope.birM;
      arr[2]=scope.birD;
      scope.birthday.returnValue=arr.join("-");
     }
    }
   }
  }
 })
});

 html

<div select-datepicker birthday="birthday"> 

js 传入的数据

$scope.birthday={
   birthday:1993-01-20,
   returnValue:'',
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中的Screen屏幕对象
Jan 16 Javascript
javascript中&quot;/&quot;运算符常见错误
Oct 13 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
jQuery的bind()方法使用详解
Jul 15 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
JavaScript中匿名函数的递归调用
Jan 22 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
Oct 27 jQuery
mongoose设置unique不生效问题的解决及如何移除unique的限制
Nov 07 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
微信小程序自定义组件components(代码详解)
Oct 21 Javascript
vue.js中mint-ui框架的使用方法
May 12 #Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 #Javascript
微信小程序之数据双向绑定与数据操作
May 12 #Javascript
Flask中获取小程序Request数据的两种方法
May 12 #Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
May 12 #Javascript
微信小程序 支付功能实现PHP实例详解
May 12 #Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 #Javascript
You might like
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
Javascript中Event属性搜集整理
2013/09/17 Javascript
js文字横向滚动特效
2015/11/11 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
幼儿园新学期寄语
2014/01/18 职场文书
先进个人获奖感言
2014/01/24 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
《影子》教学反思
2014/02/21 职场文书
世博会口号
2014/06/20 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
初中作文评语
2014/12/25 职场文书
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS