基于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 相关文章推荐
文本框回车提交与禁止提交示例
Sep 27 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
avalonjs制作响应式瀑布流特效
May 06 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
Vue列表循环从指定下标开始的多种解决方案
Apr 08 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 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代码的53条建议
2008/03/27 PHP
php动态生成JavaScript代码
2009/03/09 PHP
php 获取全局变量的代码
2011/04/21 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
8个PHP程序员常用的功能汇总
2014/12/18 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
python模块之paramiko实例代码
2018/01/31 Python
python线程中同步锁详解
2018/04/27 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python循环实现n的全排列功能
2019/09/16 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Python json读写方式和字典相互转化
2020/04/18 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
学生自我评价范文
2014/02/02 职场文书
敬老院活动总结
2014/04/28 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书