基于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中创建对象的三种常用方法
Dec 30 Javascript
读jQuery之九 一些瑕疵说明
Jun 21 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
scrollWidth,clientWidth,offsetWidth的区别
Jan 13 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
关于JS变量和作用域详解
Jul 28 Javascript
微信小程序中单位rpx和rem的使用
Dec 06 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
Jun 26 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 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电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP常用的排序和查找算法
2015/08/06 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
js停止输出代码
2008/07/20 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
python之yield表达式学习
2014/09/02 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
python多任务之协程的使用详解
2019/08/26 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
两则小学生的自我评价分享
2013/11/14 职场文书
师范学院教师自荐书
2014/01/31 职场文书
护理专业自荐信范文
2014/02/26 职场文书
周年庆促销方案
2014/03/15 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
项目经理岗位职责
2015/01/31 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书