Angular 7 için DateTime seçici yok mu?

Aug 30 2020

Angular 7 için herhangi bir DateTime seçici bulamadım. Bu yüzden Tarih Seçici ve Saat Seçiciyi birleştirmeye karar verdim.

https://ng-bootstrap.github.io/#/components/datepicker

https://ng-bootstrap.github.io/#/components/timepicker

<ng-template #dateTimePicker>
  <ngb-datepicker #createdStartDate name="datepicker"></ngb-datepicker>
  <ngb-timepicker #createdStartTime name="timepicker" [meridian]="true"></ngb-timepicker>
</ng-template>

<form [formGroup]="managePromotionsForm" 
    <div class="col-md-6">
      <div class="row form-group">
        <label class="col-md-4 control-label" for="createdStartDate" translate="">Created From </label>
        <div class="col-md-6">
          <div class="input-group">
            <input readOnly class="form-control" id="createdStartDate" placeholder="From Date"
              [formControl]="controls['createdStartDate']">
              
              
            <div class="input-group-append">
              <button class="btn btn-outline-secondary calendar" [ngbPopover]="dateTimePicker"  type="button"></button>
            </div>
          </div>
        </div>
      </div>
    </div>
</form>

Şimdiye kadar sahip olduğum şey bu

Şimdi createdStartDatemetin kutusunda seçilen tarih ve saat nasıl görüntülenir ?

Yanıtlar

1 Eliseo Aug 30 2020 at 10:21

İsterseniz ngbDropDown, ngbDatePicker ve ngbTimePicker birleşik kullanabilirsiniz

Bunun için iki değişkene ve bir alıcıya ihtiyacınız var

  date: any;
  time:any= {hour:0,minute:0};

  _value;
  label;
  ngOnInit()
  {
    this.getDatetime()
  }
  getDatetime() {
    let value = null;
    if (!this.date) {
      if (!this.time) value = "yyyy/MM/dd hh:mm";
      else
        value =
          "yyyy/MM/dd " +
          ("0" + this.time.hour).slice(-2) +
          ":" +
          ("0" + this.time.minute).slice(-2);
    }
    if (!value) {
      value = new Date(Date.UTC(
        this.date.year,
        this.date.month - 1,
        this.date.day,
        this.time ? this.time.hour : 0,
        this.time ? this.time.minute : 0
      );
      this._value=value;
   } else 
      this._value=null

   this.form.get("control").setValue(this._value);
   this.label=value;
  }

<form [formGroup]="form">
  <div ngbDropdown>
  <button class="datepicker btn btn-link"  ngbDropdownToggle>{{_value?(_value|date:'medium'):label}}</button>
      <div ngbDropdownMenu >
        <ngb-datepicker #dp [(ngModel)]="date" (dateSelect)="getDatetime()"[ngModelOptions]="{standalone:true}" ></ngb-datepicker>
        <ngb-timepicker [ngModel]="time" (ngModelChange)="time=$event;getDatetime()"[ngModelOptions]="{standalone:true}"></ngb-timepicker>
      </div>
      </div>
  <button class="btn btn-primary">submit</button>

Stackblitz'de görün

NOT: Bu, bağımlılık yapmamak için özel bir form denetimi oluşturacağımız bir durumdur.

Merak için güncelleme , stackblitz'de özel form kontrolünü yapıyorum

1 MuhammadKamran Aug 30 2020 at 08:15

Bağlayabileceğiniz bir form öğesi oluşturmak istiyorsanız. Daha iyi bir yol, ayrı bir bileşen oluşturmak ve kontrol değeri erişimcisini uygulamaktır .

Daha sonra bileşeni bir form öğesi olarak kullanabilir ve ona ngModal veya form denetimi bağlayabilirsiniz.