基于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 相关文章推荐
学习ExtJS form布局
Oct 08 Javascript
JavaScript 构造函数 面相对象学习必备知识
Jun 09 Javascript
jQuery1.6 正式版发布并提供下载
May 05 Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
jquery得到font-size属性值实现代码
Sep 30 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
Jan 26 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 Javascript
单行 JS 实现移动端金钱格式的输入规则
May 22 Javascript
element-ui 表格数据时间格式化的方法
Aug 24 Javascript
layUI实现三级导航菜单效果
Jul 26 Javascript
JavaScript基础之this和箭头函数详析
Sep 05 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 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
基于文本的访客签到簿
2006/10/09 PHP
分享PHP入门的学习方法
2007/01/02 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
详解微信小程序 登录获取unionid
2017/06/27 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
ng-alain表单使用方式详解
2018/07/10 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
教师节慰问信
2015/02/15 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android