基于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 数组实现一个类似ruby的迭代器
Oct 27 Javascript
关于javascript中this关键字(翻译+自我理解)
Oct 20 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
Oct 20 Javascript
Javascript使用post方法提交数据实例
Aug 03 Javascript
javascript合并表格单元格实例代码
Jan 03 Javascript
JavaScript中对象的不同创建方法
Aug 12 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
详解Vue微信授权登录前后端分离较为优雅的解决方案
Jun 29 Javascript
vue首次赋值不触发watch的解决方法
Sep 11 Javascript
webpack4实现不同的导出类型
Apr 09 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网站提速三大“软”招
2006/10/09 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
YII实现分页的方法
2014/07/09 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
Javascript 二维数组
2009/11/26 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
Python数据类型学习笔记
2016/01/13 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
优秀员工获奖感言
2014/03/01 职场文书
合作意向书模板
2014/03/31 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
《正比例》教学反思
2016/02/23 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android