使用angular写了一个三级联动的生日插件

本文介绍了一款基于AngularJS的生日联动插件开发过程及其实现细节,该插件能够实现年月日三级联动选择,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

王者荣耀深似海啊,感觉自己的博客都要长满野草了,最近菁英汇的1.0.2版本已经开发完了,就等着联调,冒烟测试了。写了一个生日联动插件具体的效果是这样的

 

 

具体的数据

我取得数据是今年的数据,如果是想要做三级联动的日期插件,改一下时间就好了

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:'',
}

 

转载于:https://www.cnblogs.com/heyinwangchuan/p/6846433.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值