更改一个月后的日期未更新

时间:2018-01-24 21:21:21

标签: angular typescript date-pipe

我只是在一个简单的视图,我可以改变一个月:

    <button class="btn btn-primary" (click)="switchToPrevMonth()"><</button>
{{currentDate|date:'MMMM'}}
<button class="btn btn-primary" (click)="switchToNextMonth()">></button>

然后在我的.ts:

ngOnInit() {
this.currentDate = new Date();
}

switchToNextMonth() {
 this.currentDate.setMonth(this.currentDate.getMonth()+1)
 this.cdRef.detectChanges()
}

switchToPrevMonth() {
this.currentDate.setMonth(this.currentDate.getMonth()-1)
this.cdRef.detectChanges()
}

但它没有刷新日期 - 我通过创建一个在ts中使用DatePipe的方法getDate()(看下面的代码)并返回一个字符串但想知道为什么第一个案例没有#&# 39;工作,如果有办法让它发挥作用......?:s

有效的代码:

    <button class="btn btn-primary" (click)="switchToPrevMonth()"><</button>
{{getDate()}}
<button class="btn btn-primary" (click)="switchToNextMonth()">></button>

.TS:

getDate():string{
return this.dp.transform(this.currentDate,"MMMM");
}

1 个答案:

答案 0 :(得分:3)

修改Date对象时,Angular不会检测到任何更改。强制更改检测的一种方法是每次修改日期时创建一个新的Date对象。您可以在this stackblitz中看到它无需手动调用ChangeDetectionStrategy.OnPush即可(除非您的组件使用export class MyComponent implements OnInit { public currentDate: Date; ngOnInit() { this.currentDate = new Date(); } switchToNextMonth() { this.incrementMonth(1); } switchToPrevMonth() { this.incrementMonth(-1); } private incrementMonth(delta: number): void { this.currentDate = new Date( this.currentDate.getFullYear(), this.currentDate.getMonth() + delta, this.currentDate.getDate()); } } ,否则可能除外)。

{{1}}