Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
133
rated 0 times [  134] [ 1]  / answers: 1 / hits: 33214  / 7 Years ago, thu, september 21, 2017, 12:00:00

I want to open calendar where user chooses date from date-picker not only when user clicks on calendar icon, but also when clicks on input field. Material DatePicker. So I create directive for this, attaching it to <md-datepicker> and also watching for (click) event on input:



Html:



  <md-form-field class=field-half-width>
<input mdInput [mdDatepicker]=picker2 placeholder=Galioja iki
formControlName=dateUntil (click)=clickInp()>
<md-datepicker-toggle id=calendar mdSuffix [for]=picker2 ></md-datepicker-toggle>
<md-datepicker #picker2 manualClickRenderer></md-datepicker>
</md-form-field>


form-component:



import {ManualClickRerender} from '../shared/directives/manual-click.directive';

@Component({
selector: 'form',
providers: [ManualClickRerender]
})

export class FormComponent implements OnInit, OnChanges {
...
clickInp() {
this.manualClickRerender.botClick();
}


Directive:



import { Directive, Renderer, ElementRef } from '@angular/core';
@Directive({
selector: '[manualClickRenderer]'
})
export class ManualClickRerender {

private nativeElement : Node;

constructor( private renderer : Renderer, private element : ElementRef ) {
this.nativeElement = element.nativeElement;
}

botClick() {
console.log(this.nativeElement); // logs the whole form, not the <md-datepicker>. I guess problem is here
this.renderer.invokeElementMethod(this.nativeElement, 'click', []);
}
}


This is my first custom directive ever, so not completaly sure how to import / provide it, etc. I imported it in main module and added to declarations, but after I imported it in my form component (I did that because need to pass click event to it) got error that there are no providers to ManualClickRerender. So added it as provider as well in form-component. So, yes, I imported it twice..



Also as you see, I use Rerender, not Rerender2, because it doesn't have invokeElementMethod method... But I bet there is a workaround, just dont know it..



Thanks in advance for any info.


More From » angular

 Answers
15

There is no need for providers



<md-input-container>
<input mdInput [mdDatepicker]=start (click)=start.open() [(ngModel)]=_start [ngModelOptions]={standalone: true} placeholder=choisir date (keydown)=false>
<button mdSuffix [mdDatepickerToggle]=start></button>
</md-input-container>
<md-datepicker #start></md-datepicker>

[#56425] Monday, September 18, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
keyonna

Total Points: 521
Total Questions: 104
Total Answers: 96

Location: Samoa
Member since Tue, May 3, 2022
2 Years ago
;