I am trying to build a datetime picker directive like the following.<input [(ngModel)]="date1" datetime-picker date-only />
and date1
is assigned as a Date, e.g., new Date()
When I display this in html, text in input element looks like the followingThu Jan 01 2015 00:00:00 GMT-0500
I want to display like the following instead2015-01-01 00:00:00
I want to format date WITHIN a directive using DatePipe instead of showing result from default toString() function.
My question is; "within a directive, how do I access ngModel variable?", e.g., date1, so that I can add toString() method.
If my approach is not right, please advise me.
The ngModel directive is a directive that is used to bind the values of the HTML controls (input, select, and textarea) or any custom form controls, and stores the required user value in a variable and we can use that variable whenever we require that value. It also is used during form validations.
ngModel is responsible for: Binding the view into the model, which other directives such as input , textarea or select require.
If we use two way binding syntax for ngModel the value will be updated. So the default (ngModelChange) function will update the value of ngModel property. i.e., user.Name . And the second (ngModelChange) will be triggered printing the user name value in the console.
Here is simple and easy way to listen and notify ngModel. I have just demonstrated with jQuery for easy understanding. Practically, it can be anything.
import { Directive, ElementRef } from '@angular/core';
import { NgModel } from '@angular/forms';
@Directive({
selector: `[ngModel][customDir]`,
providers: [NgModel]
})
export class CustomDirective {
constructor(private element: ElementRef, private ngModel: NgModel) {
}
ngOnInit() {
let that = this;
/* Here you can write custom initialization code */
/* Listening to the value of ngModel */
that.ngModel.valueChanges.subscribe(function (value) {
/* Set any value of your custom control */
$(that.element.nativeElement).data("newValue",value);
});
/* Inform ng model for any new change happened */
$(that.element.nativeElement).bind("customEvent",function (someNewValue) {
that.ngModel.update.emit(someNewValue);
}
});
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With