Обновить поле углового ввода из плагина jQuery - PullRequest
0 голосов
/ 11 января 2019

Я использую плагин jQuery в своем угловом приложении. https://github.com/Pikaday/Pikaday

Когда пользователь выбирает дату из ввода DatePicker, я хочу, чтобы она была доступна в угловом FormControl.

Вот мой код шаблона.

<input id="start_date" formControlName="start_date" type="text" class="form-control datepicker datepicker-input" placeholder="Start Date" readonly="readonly">

Вот мой код сценария типа.

import { Component, OnInit, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import {Router} from '@angular/router';
declare var $, Pikaday: any;

@Component({
  selector: 'app-search-main',
  templateUrl: './search-main.component.html',
  styleUrls: ['./search-main.component.css']
})
export class SearchMainComponent implements OnInit {

  params = {};
  searchForm = new FormGroup({
    keyword: new FormControl(''),
    start_date: new FormControl(''),
    end_date: new FormControl(''),
    duration: new FormControl(''),
  });

  constructor(private router: Router) {}

  ngOnInit() {
    var searchParams = sessionStorage.getItem('search-params');
    if (searchParams != '') {
      searchParams = JSON.parse(searchParams);
    }
    this.params = searchParams;
    $(document).ready(function(){
        $('input').iCheck({
            checkboxClass: 'icheckbox_minimal-blue',
            radioClass: 'iradio_minimal-blue',
            increaseArea: '20%'
          });
      var startDatePicker = new Pikaday({
          field: document.getElementById('start_date'),
          format: 'YYYY-MM-DD',
          minDate: new Date(),
          onSelect: function(date) {
            endDatePicker.setMinDate(date);
              endDatePicker.setDate(date);
              endDatePicker.show();
          }
      });
      var endDatePicker = new Pikaday({
          field: document.getElementById('end_date'),
          format: 'YYYY-MM-DD',
          minDate: new Date()
      });
    });
  }

  onSubmit() {
    this.router.navigate(['/search-result'], { queryParams: this.searchForm.value });
    return false;
  }
}

Теперь я хочу обновить угловую форму со значением, выбранным из start_dater (используя плагин jQuery pikaday)

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Спасибо @ Вэнь Хао Ву, я наконец решил это с помощью множества хаков, не уверен, что есть лучший подход.

Вот что я сделал.

import { Component, OnInit, Input } from '@angular/core';
import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
import {Router} from '@angular/router';
declare var $, Pikaday: any;

@Component({
  selector: 'app-search-main',
  templateUrl: './search-main.component.html',
  styleUrls: ['./search-main.component.css']
})
export class SearchMainComponent implements OnInit {

  searchForm = null;

  constructor(private router: Router, private _fb: FormBuilder) {}

  ngOnInit() {
    this.buildForm();
    $(document).ready(function(){
        var selectric = $('select').selectric();
      selectric.on('change', function(e) {
        this.searchForm.get('venue').setValue($("#venue option:selected").val());
        this.searchForm.get('meeting').setValue($("#meeting option:selected").val());
      }.bind(this));
    }.bind(this));
  }

  buildForm() {
    this.searchForm = this._fb.group({
      venue: ['',[]],
      meeting: ['',[]],
      keyword: ['',[]],
      duration: ['',[]],
      start_date: ['',[]],
      end_date: ['',[]],
      start_time: ['',[]],
      arrangement: ['',[]],
      guest: ['',[]],
      setup_style: ['',[]]
    });
  }

  onSubmit() {
    this.router.navigate(['/search-result'], { queryParams: this.searchForm.value });
    return false;
  }
}
0 голосов
/ 11 января 2019
import {FormBuilder} from '@angular/forms';

contructor(private _fb: FormBuilder){super();}

ngOnInit() {this.buildForm();}

buildForm(){
this.myForm = this._fb.group({
  field1: ['',[]], //set the field initial value to '', with an empty set of validators
  field2: ['',[]],
  field3: ['',[]]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...