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

本文参照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;

 

 

d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值