zoukankan      html  css  js  c++  java
  • 时间选择框(可用于Form)

    <style>
      .time-range-contianer {
        display: inline-block;
      }
    </style>

    // html <div class="time-range-contianer"> <nz-timepicker [(ngModel)]="start" [nzFormat]="format" (ngModelChange)="changeStart($event)" ></nz-timepicker> <nz-timepicker *ngIf='isChange' [(ngModel)]="end" [nzFormat]="format" (ngModelChange)="changeEnd($event)" [nzDisabledHours]="disabledHours" [nzDisabledMinutes]="disabledMinutes"></nz-timepicker> <nz-timepicker *ngIf='isChangeNo' [(ngModel)]="end" [nzFormat]="format" (ngModelChange)="changeEnd($event)" [nzDisabledHours]="disabledHours" [nzDisabledMinutes]="disabledMinutes"></nz-timepicker> </div> import { Component, Input, Output, EventEmitter, OnInit, forwardRef, SimpleChanges, OnChanges} from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { ControlValueAccessor } from '@angular/forms/src/directives'; import * as moment from 'moment'; @Component({ selector: 'app-time-range', templateUrl: 'time-range.component.html', providers: [{ // 固定的,useExisting的是当前的组件 provide: NG_VALUE_ACCESSOR, useExisting: forwardRef( () => TimeRangeComponent), multi: true, }] })

    // js文件 export class TimeRangeComponent implements OnInit, ControlValueAccessor { @Output(
    'checked') valueChangeTime: EventEmitter<any> = new EventEmitter<any>(); // @Output() public valueChange: EventEmitter<any> = new EventEmitter(); constructor() {} public start: Date = new Date(); public end: Date = new Date(); public h = new Date(this.start).getHours(); public m = new Date(this.end).getMinutes(); public s = 0; public isChange = true; public isChangeNo = false; @Input() public format = 'HH:mm:ss'; @Input() public timeRange = ''; private onChange: Function = function () { }; private onTouched: Function = function () { }; public get value() { let time = ''; const start = moment(this.start).format(this.format); const end = moment(this.end).format(this.format); time = `${start}-${end}`; return time; } @Input() public set value(value){ // console.log('set') console.log(value); this.onChange(value); this.onTouched(); this.emitEvent(); } newArray = (start, end) => { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; } disabledMinutes = () => { const startH = new Date(this.start).getHours(); const endH = new Date(this.end).getHours(); if (startH === endH) { return this.newArray(0, this.m); } return []; } disabledHours = () => { const hours = this.newArray(0, 60); hours.splice(this.h, 24 - this.h); return hours; } public changeStart (value) { const start = moment(value).format('HH:mm:ss'); const arr = start.split(':'); this.h = + arr[0]; this.m = + arr[1]; this.s = + arr[2]; if (value > this.end) { this.end = this.start; } this.isChange = !this.isChange; this.isChangeNo = !this.isChangeNo; // this.disabledHours(); // this.disabledMinutes(this.h); this.emitEvent(); } public changeEnd (value) { this.emitEvent(); } public writeValue(value: any) { let start = new Date(); let end = new Date(); if (value) { const arr = value.split('-'); if (arr[0]) { start = new Date(`2019-01-01 ${arr[0]}`); } if (arr[1]) { end = new Date(`2019-01-01 ${arr[1]}`); } } this.start = start; this.end = end; } public setDisabledState?(isDisabled: boolean) {} public registerOnChange(fn: Function) { this.onChange = fn; } public registerOnTouched(fn: Function) { this.onTouched = fn; } public emitEvent() { let time = ''; const start = moment(this.start).format(this.format); const end = moment(this.end).format(this.format); time = `${start}-${end}`; this.valueChangeTime.emit(time); // this.valueChange.emit(time); } ngOnInit() { if (this.timeRange) { let start = new Date(); let end = new Date(); const arr = this.timeRange.split('-'); if (arr[0]) { start = new Date(`2019-01-01 ${arr[0]}`); } if (arr[1]) { end = new Date(`2019-01-01 ${arr[1]}`); } this.start = start; this.end = end; } // this.emitEvent(); } }
  • 相关阅读:
    react-native 点击按钮进行交互
    常用类
    js里面 undefined 和 null
    ajax 提交数据
    通过Unicode判断一个字符是不是汉字
    git commit 后的对话框
    vue-cli 使用less的方法
    node创建服务器简单测试接口
    bootstrap3 模态框js的控制
    鱼眼镜头的坐标变换
  • 原文地址:https://www.cnblogs.com/zhuangcui/p/12132654.html
Copyright © 2011-2022 走看看