4

現在、Ionic 2 アプリを作成しており、次のカスタム コンポーネントを作成しています。

import {Component, EventEmitter} from 'angular2/core';
import {Button, Icon, Item} from 'ionic-angular';
import {DatePicker} from 'ionic-native';
import {HSDatePipe} from '../pipes/custom-dateformat.pipe';

@Component({
    selector: 'date-picker',
    directives: [Button, Icon, Item],
    inputs: ['date', 'dateFormat', 'mode'],
    outputs: ['onUpdate'],
    pipes: [HSDatePipe],
    template: `<button clear (click)="selectDate()">
        {{date | hsDate:dateFormat}}
    </button>`
})
export class HSDatePicker {

    date:any;
    dateFormat:any;
    label:string;
    mode:string;
    onUpdate:any = new EventEmitter();

    constructor() {
    }

    selectDate() {
        let self:any = this;
        let previousDate:any = self.date;

        DatePicker.show({
            date: new Date(self.date),
            mode: self.mode
        })
        .then(
            (date:any) => {
                if (!date) {
                    date = previousDate;
                }
                self.onUpdate.emit(date);
            },
            err => {
                console.log('error -', err);
            }
        );
    }

}

このコンポーネントを呼び出すページで、次のようにページに含めます。

<date-picker item-right [date]="period.dateEnd" [dateFormat]="'HH:mm'" [mode]="'time'" (onUpdate)="dateChange($event, 'dateEnd')"></date-picker>

関数は次のdateChangeようになります。

dateChange(e, selector) {
    let newDate = moment(e);
    this.transactionFilter[selector] = newDate;
}

コンポーネントを使用して新しい日付を選択すると、期待どおりに関数が呼び出され、transactionFilter オブジェクトが更新されます。ただし、ビューは更新されず、ボタンをクリックするか入力にフォーカスするまでページに古い日付が表示されます。

問題は DatePicker プラグインまたは promise に関係していると思いますselectDate()。関数をそのように変更すると、正常に更新されるためです。

selectDate() {
    let self:any = this;
    self.onUpdate.emit(new Date());
}

ビューを強制的に更新する方法はありますか、それとも別の方法で行う必要がありますか?

助けてくれてありがとう。

編集:メインページのテンプレート

@Page({
    template: `
    <ion-content>
        <ion-toolbar primary class="subheader">
            <ion-title>Transaction Viewer Filter</ion-title>
        </ion-toolbar>
        <ion-list>
            <ion-item>
                <ion-icon name="calendar" item-left></ion-icon>
                From
                <date-picker item-right [date]="transactionFilter.fromDate" [dateFormat]="'DD/MM/YYYY HH:mm'" [mode]="'datetime'" (onUpdate)="dateChange($event, 'fromDate')"></date-picker>
            </ion-item>
            <ion-item>
                <ion-icon name="calendar" item-left></ion-icon>
                To
                <date-picker item-right [date]="transactionFilter.toDate" [dateFormat]="'DD/MM/YYYY HH:mm'" [mode]="'datetime'" (onUpdate)="dateChange($event, 'toDate')"></date-picker>
            </ion-item>
            <ion-item>
                Count: {{count}}
            </ion-item>
        </ion-list>
        <ion-row>
            <ion-col>
                <button class="close-modal" (click)="close()" danger block>Close</button>
            </ion-col>
            <ion-col>
                <button class="save-modal" (click)="save()" favorite block>Save</button>
            </ion-col>
        </ion-row>
    </ion-content>`,
    directives: [HSDatePicker]
})
4

2 に答える 2

0

selectDate()私はそのように機能を変更し、今は動作します。Thierry とこの投稿ionic2-camera-demoに感謝します。私を正しい方向に向けてくれました。

selectDate() {

        let self:any = this;
        let previousDate = self.date;

        DatePicker.show({
            date: new Date(self.date),
            mode: self.mode
        })
        .then(
            (date:any) => {
                if (!date) {
                    date = previousDate;
                }
                this.ngZone.run(() => {
                    self.onUpdate.emit(date);
                });
            },
            err => {
                console.log('error -', err);
            }
        );

    }
于 2016-05-06T14:02:00.870 に答える