Angular 与方法的角度绑定未按预期工作
我试图为我的列表元素创建一个假时间戳。它应该看起来像“400万年前,1小时前,等等……” 到目前为止,我可以管理它,但当时间戳在列表上时,它不是动态的。我的意思是它总是像“4百万年前”一样,但一分钟后不会像“5百万年前”一样改变。我不太明白这一点,因为我使用的是new Date().getTime(),所以我希望它从当前时间起一直起作用。 知道我做错了什么吗? 谢谢Angular 与方法的角度绑定未按预期工作,angular,typescript,two-way-binding,Angular,Typescript,Two Way Binding,我试图为我的列表元素创建一个假时间戳。它应该看起来像“400万年前,1小时前,等等……” 到目前为止,我可以管理它,但当时间戳在列表上时,它不是动态的。我的意思是它总是像“4百万年前”一样,但一分钟后不会像“5百万年前”一样改变。我不太明白这一点,因为我使用的是new Date().getTime(),所以我希望它从当前时间起一直起作用。 知道我做错了什么吗? 谢谢 GetFaketTimeStamp(获胜者:SlotWidgetRecentWinnerObject){ const fakeT
GetFaketTimeStamp(获胜者:SlotWidgetRecentWinnerObject){
const fakeTime=new Date().getTime()-60*winner.fakeTime;
返回此.slotWidgetService.timeSince(fakeTime);
}
timeSince(时间戳){
让我们现在=新日期();
设secondsPast=(now.getTime()-timeStamp)/1000;
如果(秒间隔<60){
返回parseInt(字符串(secondsPast))+'s';
}
如果(秒间隔<3600){
返回parseInt(字符串(secondsPast/60))+'m';
}
如果(secondsPast这是因为没有任何东西触发组件中的更改
为此,请更新代码并添加
lastTime$: Observable<any>;
ngOnInit() {
this.lastTime$ = interval(1000).pipe(map(c => this.getFakeTimestamp()));
}
lastTime$:可观察
更新问题后,我的答案仍然适用
创建一个新的组件,它将显示伪造的数据并添加@Input作为赢家
然后在该组件中使用带间隔的主题
在您有迭代的代码中,将{{getFakeTimestamp(winner)}}}ago
替换为
看起来我误解了这个问题,或者因为我认为你们有问题,那个日期在UI上并没有改变
如果您需要在显示项目更改时间的地方执行逻辑,那么我将使用,然后在代码中您可以使用smth,如上次更新:{{myDate | amTimeAgo}}
确保您的计算正确。您的fakeTime总是从当前时间中分出来,其结果总是相同的时差:
getFakeTimestamp(winner: SlotWidgetRecentWinnerObject) {
const fakeTime = new Date().getTime() - 60 * winner.fakeTime; // fakeTime will always be winner.fakeTime minutes ago. new Date() returns the same as Date.now()
return this.slotWidgetService.timeSince(fakeTime);
}
另一个提示:有一个名为moment.js
的库,它使处理时间和日期变得非常简单。还有一个角度的管道包装器ngx moment
,我更喜欢它,我想我做这样的任务对不起,我想我犯了一个错误。它实际上是一个列表元素,所以这个。lastTime$不起作用,因为每个列表元素都不起作用有不同的时间戳。我将更正我的question@TolgaTamer你需要使用管道来做什么?@TolgaTamer我已经更新了答案一点逻辑仍然是一样的。但是在你的stackblitz中,时间是不断变化的。我需要它在1分钟过去后正好变化1分钟。就像它显示4分钟之前,1分钟之后它应该ld显示5分钟前。假时间基本上是“this.fakeTime=this.randomBetween(1000100000);”好的。在你的stackblitz中,你从当前时间中减去随机数(比如5000)。所以你得到的时间戳是5000(秒?)在当前时间之后,即1小时前。下次随机数达到5000时,您也将看到1小时前,因为它是根据当前时间戳计算的
lastTime$: Observable<any>;
ngOnInit() {
this.lastTime$ = interval(1000).pipe(map(c => this.getFakeTimestamp()));
}
<div>{{lastTime$ | async}}</div>
getFakeTimestamp(winner: SlotWidgetRecentWinnerObject) {
const fakeTime = new Date().getTime() - 60 * winner.fakeTime; // fakeTime will always be winner.fakeTime minutes ago. new Date() returns the same as Date.now()
return this.slotWidgetService.timeSince(fakeTime);
}