Since you have a form, I would suggest that you skip ngModels and use the form you have. Still a little unsure of what this.clientAction.transformInput(input) should do, as it were explained, somehow convert the values. You should be able to include this, perhaps when you submit the form? In any case, as said, you have your form values ββstored in the object created by the form, which looks something like this for you:
{ "monday":null, "tuesday":null, "wednesday":null, // ... and so on }
When you enter your fields, you can record each keystroke of valueChanges , where you can access the full form:
this.myForm.valueChanges.subscribe(res => { console.log("all form values: ", res) // here is an object with all your form values })
When you need to, you can also access each control here on Monday:
console.log(this.myForm.controls['monday'].value)
That way, it saves you from having to use ngModel for each form value.
So, these are a few ways that you can intercept values ββand then "convert" them at some point when you need / need. Probably the best thing to do is when you submit the form, loop the values ββand transform them. And it is absolutely dynamic, as you wanted, and does not need 7 functions to convert each control !;)
Hope this helps you, and here is the plunker (also check the console).