Angular 与方法的角度绑定未按预期工作

Angular 与方法的角度绑定未按预期工作,angular,typescript,two-way-binding,Angular,Typescript,Two Way Binding,我试图为我的列表元素创建一个假时间戳。它应该看起来像“400万年前,1小时前,等等……” 到目前为止,我可以管理它,但当时间戳在列表上时,它不是动态的。我的意思是它总是像“4百万年前”一样,但一分钟后不会像“5百万年前”一样改变。我不太明白这一点,因为我使用的是new Date().getTime(),所以我希望它从当前时间起一直起作用。 知道我做错了什么吗? 谢谢 GetFaketTimeStamp(获胜者:SlotWidgetRecentWinnerObject){ const fakeT

我试图为我的列表元素创建一个假时间戳。它应该看起来像“400万年前,1小时前,等等……” 到目前为止,我可以管理它,但当时间戳在列表上时,它不是动态的。我的意思是它总是像“4百万年前”一样,但一分钟后不会像“5百万年前”一样改变。我不太明白这一点,因为我使用的是new Date().getTime(),所以我希望它从当前时间起一直起作用。 知道我做错了什么吗? 谢谢

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);
    }