私は、ユーザーがカレンダーアイコンをクリックするだけでなく、入力フィールドをクリックしたときに日付ピッカーから日付を選択するカレンダーを開きたい。 Material DatePicker。だから私は<md-datepicker>
に添付しても入力に(click)
イベントのために見て、このためにディレクティブを作成します。入力のクリックで角度の材料、Mdのdatepicker - 開いている日付ピッカー
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>
フォーム成分:
import {ManualClickRerender} from '../shared/directives/manual-click.directive';
@Component({
selector: 'form',
providers: [ManualClickRerender]
})
export class FormComponent implements OnInit, OnChanges {
...
clickInp() {
this.manualClickRerender.botClick();
}
指令:
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', []);
}
}
これは初めてのカスタムディレクティブです。私はそれをメインモジュールでインポートして宣言に追加しましたが、フォームコンポーネントにインポートした後(私はそれをクリックイベントを渡す必要があるため)、エラーはありませんプロバイダをManualClickRerenderに追加します。それでは、プロバイダとしてform-componentにも追加されました。だから、私はそれを2回インポートしました。
また、私はinvokeElementMethod
メソッドを持っていないので、Rerender2ではなくRerenderを使用しています...しかし、回避策があると思います。
事前情報ありがとうございます。
「オープン」は関数です。しかしあなたのコードはきれいではありません。私は '(click)=" start.open() "'と '(keydown)=" false "'だけ必要でした。ちょっとした問題です。入力の端をクリックするとプレースホルダが上がりますが、カレンダーは表示されません。入力の途中でもっとクリックする必要があります。しかし、このソリューションはすばらしく清潔です。 –
ちょうどもう1つの情報角度のある素材はIE10 +です。 – Melchia
:-)私もそれを理解し始めます。 –