欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Angularjs 1.x 中使用 layDate 日期控件

程序员文章站 2022-07-07 17:00:36
...

本文参照Angularjs 中使用 layDate 日期控件进行修改。

laydate控件版本采用5.0.7,下载地址github。原版的package.json文件好像是有编码问题。需要将该文件转到utf-8格式的。

 

/**
 * 使用示例:
 * <p>
 *     <ul>
 *         <li> 基本日期选择:<input type="text"  lay-date-picker="" ng-model="date" placeholder="日期"/>
 *         <li> 带有日期范围选择:<input type="text"  lay-date-picker="" range="true" ng-model="daterange" placeholder="日期范围"/>
 *         <li> 带有日期范围选择,并自定范围符号:<input type="text"  lay-date-picker="" range="→" ng-model="daterange" placeholder="日期范围"/>
 *         <li> 时间选择:<input type="text"  lay-date-picker="" range="true" ng-model="daterange" placeholder="时间"/>
 *         <li> 时间范围选择:<input type="text"  lay-date-picker="" range="true" date-type="time" ng-model="daterange" placeholder="时间范围"/>
 *         <li> 日期时间范围选择:<input type="text"  lay-date-picker="" range="true" date-type="datetime" ng-model="daterange" placeholder="日期时间范围"/>
 * </p>
 */
class LayDatePicker {
    constructor() {
        this.require= '?ngModel';
        this.restrict = "A";
        this.scope={
            ngModel: '=',
            max:'@',
            min:'@',
            //开启日期范围选择功能,并定义分隔符。
            //true //或 range: '~' 来自定义分割字符
            range:'@',
            //值:year、month、time、datetime、date
            //默为,date
            dateType:'@',
            format:"@"
        }
        this.link=function(scope, element, attr, ngModel) {
            var _date = null,_config={};
            // 初始化参数
            _config = {
                elem: element[0],
                //通过laydate的done回调函数重新设置ngModel的值
                done: function(value, date, endDate){
                    scope.$apply(setViewValue(value));
                    // console.log("done: "+value); //得到日期生成的值,如:2017-08-18
                    // console.log("done: "+date); //得到日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}
                    // console.log("done: "+endDate); //得结束的日期时间对象,开启范围选择(range: true)才会返回。对象成员同上。
                }
            };

            // 监听日期类型
            if(attr.hasOwnProperty('dateType') && attr.dateType ){
                _config.type=attr.hasOwnProperty('dateType') && attr.dateType ?attr.dateType:'';
                attr.$observe('dateType', function (val) {
                    _config.type = val;
                })
            }

            // 监听格式
            if(attr.hasOwnProperty('format') && attr.format ){
                _config.format=attr.hasOwnProperty('format') && attr.format ?attr.format:'';
                attr.$observe('format', function (val) {
                    _config.format = val;
                })
            }

            // 监听日期最大值
            if(attr.hasOwnProperty('max') && attr.max ){
                _config.max=attr.hasOwnProperty('max') && attr.max ?attr.max:'';
                attr.$observe('max', function (val) {
                    _config.max = val;
                })
            }

            // 监听日期最小值
            if(attr.hasOwnProperty('min') && attr.min ){
                _config.min= attr.hasOwnProperty('min')&& attr.min ?attr.min:'',
                attr.$observe('min', function (val) {
                    _config.min = val;
                })
            }
            // 监听是否开启日期范围选择功能
            if(attr.hasOwnProperty('range') && attr.range ){
                setDateRange(_config,attr);
                attr.$observe('range', function (val) {
                    setDateRange(_config,attr);
                    // 重新渲染日期窗口
                    _date= laydate.render(_config);
                })
            }

            function setDateRange(_config,attr) {
                var tmpRangeValue = attr.hasOwnProperty('range') && attr.range ?attr.range:'';
                if(tmpRangeValue && tmpRangeValue!==false && tmpRangeValue!=="false"){
                    if(tmpRangeValue=="true" || tmpRangeValue==true){
                        _config.range=true ;
                    }else{
                        _config.range=tmpRangeValue ;
                    }
                }
            }
            // 渲染日期窗口
            _date= laydate.render(_config);

            // 模型值同步到视图上
            ngModel.$render = function() {
                element.val(ngModel.$viewValue || '');
            };

            //初始化ngModel的默认值
            setViewValue("");

            // 更新模型上的视图值
            function setViewValue(value) {
                ngModel.$setViewValue(value);
            }
        }
    }

}

LayDatePicker.$inject = [];
export default LayDatePicker;

 要让日期选择器作为一个模块使用还需要将放到一个目录中,并定义index.js文件。

以下是index.js文件

import LayDatePicker from "./datepicker";

export default  angular.module("app.directives.layDatePicker",[])
//因为指令是使用fn加返回json对象的。因为我们构造出一个匿名函数并返回LotteryHistory类的实例。
                    .directive("layDatePicker",()=>new LayDatePicker())
                    .name;

 Angularjs 1.x 中使用 layDate 日期控件
            
    
    博客分类: JavaScript  

 

d

  • Angularjs 1.x 中使用 layDate 日期控件
            
    
    博客分类: JavaScript  
  • 大小: 67.9 KB