0

ng2-bootstrap datepickerをAngular2モデル駆動型で使用できますか、それともテンプレートのみで動作しますか?フォーム?ng2-bootstrap datepickerを使用したモデル駆動型

<datepicker [(ngModel)]="startDate" ></datepicker> 

...動作するようには思えん:

文書は、(例として)次のようにあなたがそれを使用したいようなセレクタを記述しています。理想的には、次のように使用したいと考えています。

<datepicker formControlName="startDate" ></datepicker> 

...しかし、そのままでは動作しないようです。モデル駆動フォームでこのモジュールを使用する方法はありますか?そうでない場合は、モデル駆動型で動作する合理的な代替方法がありますか? (私はng2-datepickerも試しましたが、outstanding bugがあり、SystemJSで使用するのに不便です。滑らかに見えるので残念です)。

+0

最初の例を使用するとどうなりますか?エラーが出ていますか?私はこのライブラリを使ったことはありませんが、ngModelとテンプレートフォームでは、 'name'属性が必要です。 –

+0

' name'属性は必要ありません。 ...テンプレート駆動フォームを使用していた場合は、すべて設定されますが、モデル駆動フォームが優先されます。 – WillyC

+0

ご迷惑をおかけして申し訳ありません。第2の例ではなく、第1の例を使用しようとしていたときにそれを読んでいます。 Ooops :-D –

答えて

1

私はprimeNgコントロールを使用していて、驚くべき機能を備えたカレンダーコントロールを持っています。ここをクリックしてください: PrimeNg Calendar UI Control

+0

それは完全に素晴らしいように見えます!ありがとう - 私はそのショットを与えるでしょう。それは、datepickerユートピアのための私の探求のdatepicker#4ですが、確かに有望に見えます。私は今まで私の検索でより顕著に表示されなかった理由を確信していません... – WillyC

+0

それはあなたの答えとしてマークしてください。私は自分のアプリでカレンダーコントロールを使用しています。日付ピッカーではなくカレンダーであるため、日付ピッカーの機能を構築しているにもかかわらず、見つからなかった可能性があります。 –

+0

する - 私はそれを今日の午後に考え出させます。これまでのところよく見える。 – WillyC

4

ReactiveFormsModuleでng2-bootstrap datepicker用の単純なラッパーを作成しました。それは瞬間を使用するので、あなたのニーズに合わせて改善することができます。

Live demo

カスタムdatepicker.component.ts

import { Component, forwardRef, Provider } from '@angular/core'; 
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; 
import * as moment from 'moment'; 

let DATEPICKER_VALUE_ACCESSOR: Provider = { 
    provide: NG_VALUE_ACCESSOR, 
    useExisting: forwardRef(() => CustomDatepickerComponent), 
    multi: true 
}; 

@Component({ 
    selector: 'custom-datepicker[formControlName]', 
    template: ` 
    <datepicker [(ngModel)]="datePickerValue"></datepicker> 
    `, 
    providers: [DATEPICKER_VALUE_ACCESSOR] 
}) 
export class CustomDatepickerComponent implements ControlValueAccessor { 
    change = (_: any) => {}; 
    _customDatePickerValue; 
    _datePickerValue: Date; 

    get customDatePickerValue() { 
    return this._customDatepickerValue; 
    } 
    set customDatePickerValue(value) { 
    this._customDatepickerValue = value; 
    this.change(value); 
    } 

    get datePickerValue() { 
    return this._datePickerValue; 
    } 
    set datePickerValue(value) { 
    this._datePickerValue = value; 
    this.customDatePickerValue = moment(value).format('DD/MM/YYYY'); 
    } 

    writeValue() {} 
    registerOnChange(fn) { 
    this.change = fn; 
    } 
    registerOnTouched() {} 
} 

用法あなたのコンポーネントで

app.component.ts

import { Component } from '@angular/core'; 
import { FormGroup, FormControl } from '@angular/forms'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <form [formGroup]="form"> 
    <custom-datepicker formControlName="customDatepickerValue"></custom-datepicker> 
    </form> 

    <pre>{{form.value | json }}</pre> 
    ` 
}) 
export class AppComponent { 
    form: FormGroup = new FormGroup({ 
    customDatepickerValue: new FormControl() 
    }) 
} 
関連する問題