I'd like to set the date to the 1st of the currently selected month when it's changed.
is there a way without monitoring click event on the month's buttons?
tia Sam
I'd like to set the date to the 1st of the currently selected month when it's changed.
is there a way without monitoring click event on the month's buttons?
tia Sam
It's unfortunate that the
datepicker
directive doesn't have a binding to track the month/year change. Here is what I came up with as a work around.In the html...
In the controller...
The decorator
Another decorator
Here is another decorator that also works but probably a bit more resource intensive. All I do here is override the
isActive()
method already used in the directive so my method is called instead. I'm only posting this as an example of the possible ways to work around some of the restrictions in 3rd party directives. I don't necessarily recommend this solution.Datepicker's scope has a property 'activeDateId' that you can watch. It changes when you switch months.
I think the best way is to create a 'decorator' on the datepicker directive so you can add functionality to it. You can access its scope if you override the directive's 'compile' function.
You do this in a module.config function:
EDIT
I ran into an issue with code similar to this where if you switch the month and the 2 months have their 1st date on the same day, the $watch won't fire. You can get around this by watching the value of the property 'activeDate' in Datepicker's controller:
Put a $watch on the model the date picker is bound to:
I had the same issue when I was trying to set the ng-model to first day of January when they select a year. @Rob and @spongessuck answers really helped me. This is how I solved it. Whenever you select a year or month, the variable
activeDate
gets set. I am using$setViewValue
to set the model toactiveDate
by watching variabledatepickerMode
which changes whenever you select a year, month or date.`
`
Hope this helps someone.