Tisamu
10/18/2017 - 7:03 AM

Custom formControl Input Component.

Custom formControl Input Component. Exemple directly imported from Geofret project.

import { Component, OnInit, forwardRef, Input, ElementRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
declare var jQuery: any;
import '../../../assets/semantic/semantic.min.js';

@Component({
  selector: 'app-vehicle-select',
  templateUrl: './vehicle-select.component.html',
  styleUrls: ['./vehicle-select.component.css'],
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => VehicleSelectComponent),
      multi: true
    }
  ]
})
export class VehicleSelectComponent implements ControlValueAccessor {
  @Input() value;
  propagateChange = (_: any) => { };

  constructor(private elRef: ElementRef) { }

  ngOnInit() {
    console.log('filter init');
    jQuery(this.elRef.nativeElement).find('#vehicle-filter').dropdown({ placeholder: 'value' });
  }

  writeValue(value: any): void {
    if (value !== undefined) {
      // If a value is provided to the Component
      if (this.value && String(this.value).length) { // Is Not an Empty String
        this.value = value;
      }

    }
  }
  registerOnChange(fn: any): void {
    this.propagateChange = fn;
  }
  registerOnTouched(fn: any): void {
  }
  setDisabledState?(isDisabled: boolean): void {
  }
  onChange(value) {
    this.propagateChange(value);
  }
}
<select class="ui dropdown" id="vehicle-filter" [(ngModel)]="value" (change)="onChange($event.target.value)">
  <option value="" selected>Tous</option>
  <option value="Frigorifique">Frigorifique</option>
  <option value="Taut Liner">Taut Liner</option>
</select>