亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

基于datetimepicker封裝的dateRange指令

https://img1.sycdn.imooc.com//5b18dfc60001988804950372.jpg

1.需要npm引入

npm install angular-bootstrap-datetimepicker --save

2.加载:module

angular.module('app', [ui.bootstrap.datetimepicker])

3.JS:

angular.module('app').directive('dateRange', function() {
    return {
        restrict : 'EA',
        replace: true,
        scope: {
            startDate: '=',
            endDate: '=',
            startId: '@',
            endId: '@'
        },
        template : '<div class="date-box-vms">' +
        '<div class="dropdown">' +
        '<a class="dropdown-toggle" id="{{startId}}" role="button" data-toggle="dropdown" data-target="#" href="#">' +
        '<div class="input-append date input-group">' +
        '<span class="add-on"><i class="icon-th"><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/styles/img/icon/icon_cal.png" alt=""></i></span>' +
        '<input type="text" class="date-style" data-ng-model="startDate" placeholder="{{\'START_TIME\' | translate}}">' +
        '</div>' +
        '</a>' +
        '<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">' +
        '<div>' +
        '<datetimepicker data-ng-model="startDate"' +
        'data-datetimepicker-config="{ dropdownSelector: \'#\'+startId, renderOn: \'end-date-changed\' ,minView:\'day\',modelType: \'YYYY-MM-DD\'}"' +
        'data-on-set-time="startDateOnSetTime()"' +
        'data-before-render="startDateBeforeRender($view, $dates)"/>' +
        '</div>' +
        '<div>' +
        '<button class="btn btn-default-vms" ng-click="startToday()">{{ \'BTN_TODAY\' | translate }}</button>' +
        '<button class="btn btn-default-vms" ng-click="clearStartDate()">{{ \'BTN_CLEAR\' | translate }}</button>' +
        '</div>' +
        '</ul>' +
        '</div>' +
        '<span><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="styles/img/icon/xian.png" alt=""></span>' +
        '<div class="dropdown">' +
        '<a class="dropdown-toggle" id="{{endId}}" role="button" data-toggle="dropdown" data-target="#" href="#">' +
        '<div class="input-append date input-group">' +
        '<span class="add-on"><i class="icon-th"><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/styles/img/icon/icon_cal.png" alt=""></i></span>' +
        '<input type="text" class="date-style" data-ng-model="endDate" placeholder="{{\'END_TIME\' | translate}}">' +
        '</div>' +
        '</a>' +
        '<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">' +
        '<div>' +
        '<datetimepicker data-ng-model="endDate"' +
        'data-datetimepicker-config="{ dropdownSelector: \'#\'+endId, renderOn: \'start-date-changed\',minView:\'day\',modelType: \'YYYY-MM-DD\'}"' +
        'data-on-set-time="endDateOnSetTime()"' +
        'data-before-render="endDateBeforeRender($view, $dates, $leftDate, $upDate, $rightDate)">' +
        '</div>' +
        '<div>' +
        '<button class="btn btn-default-vms" ng-click="endToday()">{{ \'BTN_TODAY\' | translate }}</button>' +
        '<button class="btn btn-default-vms" ng-click="clearEndDate()">{{ \'BTN_CLEAR\' | translate }}</button>' +
        '</div>' +
        '</ul>' +
        '</div>' +
        '</div>',
        controller : function($scope) {
            //时间组件
            $scope.endDateBeforeRender = endDateBeforeRender;
            $scope.endDateOnSetTime = endDateOnSetTime;
            $scope.startDateBeforeRender = startDateBeforeRender;
            $scope.startDateOnSetTime = startDateOnSetTime;
            $scope.startToday = startToday;
            $scope.endToday = endToday;
            $scope.clearStartDate = clearStartDate;
            $scope.clearEndDate = clearEndDate;
            $scope.nowDate =  moment(new Date).format('YYYY-MM-DD');
            $scope.endId = _.isEmpty($scope.endId)? 'endTime':$scope.endId;
            $scope.startId = _.isEmpty($scope.startId)? 'startTime':$scope.startId;

            function startDateOnSetTime () {
                $scope.$broadcast('start-date-changed');
            }

            function endDateOnSetTime () {
                $scope.$broadcast('end-date-changed');
            }

            function startDateBeforeRender ($view, $dates) {
                if ($scope.endDate) {
                    let activeDate = moment($scope.endDate).add(1, $view).subtract(1, 'minute');

                    $dates.filter(function (date) {
                        return date.localDateValue() >= activeDate.valueOf()
                    }).forEach(function (date) {
                        date.selectable = false;
                    })
                }
            }

            function endDateBeforeRender ($view, $dates) {
                if ($scope.startDate) {
                    let activeDate = moment($scope.startDate).subtract(1, $view).add(1, 'minute');

                    $dates.filter(function (date) {
                        return date.localDateValue() <= activeDate.valueOf()
                    }).forEach(function (date) {
                        date.selectable = false;
                    })
                }
            }
            function startToday (){
                $scope.startDate = $scope.nowDate;
                $scope.$broadcast('start-date-changed');
            }
            function endToday (){
                $scope.endDate = $scope.nowDate;
                $scope.$broadcast('end-date-changed');
            }
            function clearStartDate (){
                $scope.startDate ='';
                $scope.$broadcast('start-date-changed');
            }
            function clearEndDate (){
                $scope.endDate ='';
                $scope.$broadcast('end-date-changed');
            }

        }
    }
});

4.HTML:

<div ng-controller="myCtrl as $ctrl">
<date-range start-id="expectStart" end-id="expectEnd"
            start-date="$ctrl.startTime" 
            end-date="$ctrl.endTime"></date-range>
</div>

引入id是为了区分组件,否则同一组件在同一页面,会出问题。可以试一下~

 同理,单个时间控件可以是这样的写:

angular.module('app').directive('dateChose', function() {
    return {
        restrict : 'EA',
        replace: true,
        scope: {
            date: '=',
            id:'@',
            required:'='
        },
        template : '<div class="date-box-vms">' +
        '<div class="dropdown">' +
        '<a class="dropdown-toggle" id="time_{{id}}" role="button" data-toggle="dropdown" data-target="#" href="#">' +
        '<div class="input-append date input-group">' +
        '<span class="add-on"><i class="icon-th"><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="styles/img/icon/icon_cal.png" alt=""></i></span>' +
        '<input type="text" class="date-style" data-ng-model="date" ng-required="required">' +
        '</div>' +
        '</a>' +
        '<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">' +
        '<div>' +
        '<datetimepicker ng-model="date"' +
        'datetimepicker-config="{ dropdownSelector: \'#time_\' + id,minView:\'day\',modelType: \'YYYY-MM-DD\'}"/>' +
        '</div>' +
        '<div>' +
        '<button class="btn btn-default-vms" ng-click="Today()">{{ \'TODAY\' | translate }}</button>' +
        '<button class="btn btn-default-vms" ng-click="clearDate()">{{ \'BTN_CLEAR\' | translate }}</button>' +
        '</div>' +
        '</ul>' +
        '</div>' +
        '</div>',
        controller : function($scope) {
            //时间组件
            $scope.Today = Today;
            $scope.clearDate = clearDate;
            $scope.nowDate =  moment(new Date).format('YYYY-MM-DD');

            function Today (){
                $scope.date = $scope.nowDate;
            }
            function clearDate (){
                $scope.date ='';
            }
        }
    }
})
<date-chose date="$ctrl.time" required="true"></date-chose>


點擊查看更多內容
4人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
61
獲贊與收藏
656

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消