Issue
I have an input field mapped to an entity in my controller with a ngModel 2-way binding:
<input type="text" [(ngModel)]="entity.one_attribute" />
When I initialize my controller, I have this entity:
{ one_attribute: null }
If a user starts to fill in the field but does not submit the form immediately and empties the field, my entity is updated to become:
{ one_attribute: "" }
Is it possible to define that empty string should be changed to null automatically?
Solution
After viewing a bunch of answers about ValueAccessor and HostListener solutions, I made a working solution (tested with RC1):
import {NgControl} from "@angular/common";
import {Directive, ElementRef, HostListener} from "@angular/core";
@Directive({
  selector: 'input[nullValue]'
})
export class NullDefaultValueDirective {
  constructor(private el: ElementRef, private control: NgControl) {}
  @HostListener('input', ['$event.target'])
  onEvent(target: HTMLInputElement){
    this.control.viewToModelUpdate((target.value === '') ? null : target.value);
  }
}
Then use it that way on your input fields:
<input [(ngModel)]="bindedValue" nullValue/>
Answered By - jobou
 
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.