基于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 相关文章推荐
把JS与CSS写在同一个文件里的书写方法
Jun 02 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
May 31 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
Javascript实现时间倒计时功能
Nov 17 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
详解小程序云开发攻略(解决最棘手的问题)
Sep 30 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
php中对2个数组相加的函数
2011/06/24 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python实现磁盘日志清理的示例
2020/11/05 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
简历中的自我评价范文
2014/02/05 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
社会实践活动总结
2015/02/05 职场文书
辞职信如何写
2015/02/27 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
MySQL 如何设计统计数据表
2021/06/15 MySQL