1

Page have multiple input field.

<div class="form-group w-100">
        <label class="col-md-3 text-left" for="">Box 2</label>
    <input
      class="form-control ml-2 mr-2"
      [value]="MenuBox2"
      [style.background]="MenuBox2"
      [(colorPicker)]="MenuBox2"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>
  <div class="form-group w-100">
    <label class="col-md-3 text-left" for="">Box 2 Text</label>

      class="form-control ml-2 mr-2"
      [value]="MenuBox2Text"
      [style.background]="MenuBox2Text"
      [(colorPicker)]="MenuBox2Text"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>
  <div class="form-group w-100">
    <label class="col-md-3 text-left" for="">Box 2 Hover Text</label>
    <input
      class="form-control ml-2 mr-2"
      [value]="MenuBox2Hover"
      [style.background]="MenuBox2Hover"
      [(colorPicker)]="MenuBox2Hover"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>

All these field are color picker using ngx-color-picker package. I am trying to get the value of each input field and store in firestore.

updateFirestoreColor(event: any) {
   this.afs.collection('General').doc('colors').update(event);
}

Problem What is the best solution to use single function for all fields, to get the value of respected field.

TIA

Kamil Naja
  • 6,267
  • 6
  • 33
  • 47
faisaljanjua
  • 886
  • 2
  • 13
  • 28

2 Answers2

0

You dont need any functions, just use Reactive forms like shown below instead of [value] for all inputs respectivly.

<div [formGroup]="form" class="form-group w-100" (ngSubmit)="onSubmit()">
        <label class="col-md-3 text-left" for="">Box 2</label>
    <input
      class="form-control ml-2 mr-2"
      formControlName="MenuBox2"
      [style.background]="MenuBox2"
      [(colorPicker)]="MenuBox2"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>
  <div class="form-group w-100">
    <label class="col-md-3 text-left" for="">Box 2 Text</label>

      class="form-control ml-2 mr-2"
      formControlName="MenuBox2Text"
      [style.background]="MenuBox2Text"
      [(colorPicker)]="MenuBox2Text"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>
  <div class="form-group w-100">
    <label class="col-md-3 text-left" for="">Box 2 Hover Text</label>
    <input
      class="form-control ml-2 mr-2"
      formControlName ="MenuBox2Hover"
      [style.background]="MenuBox2Hover"
      [(colorPicker)]="MenuBox2Hover"
      (colorPickerChange)="updateFirestoreColor($event)"
    />
  </div>

TS file:

form:FormGroup;
constructor(private fb: FormBuilder){}

ngOnInit(){
 this.form = this.fb.group({
   MenuBox2:'',
   MenuBox2Text:'',
   MenuBox2Hover:'',
 })

}

onSubmit(){
  console.log(this.form.value)//Firebase call
}
Qellson
  • 532
  • 2
  • 7
-1

As you asked What is the best solution to use a single function for all fields? so, for that, you can try something like this:

updateFirestoreColor(event: any) {
   var value= (<HTMLInputElement>event.target).value
   this.afs.collection('General').doc('colors').update(value);
}
halfer
  • 19,824
  • 17
  • 99
  • 186
AddWeb Solution Pvt Ltd
  • 21,025
  • 5
  • 26
  • 57