Angular 2“检查后,表达已更改”

The*_*eal 5 momentjs angular

我在应用程序中使用了“时刻”,它以这种方式显示“ X分钟前”标签:

{{comment.created_at | amTimeAgo}}

分钟数会自动更新(1分钟后将是X-1分钟)。

当我离开应用程序时,我正在尝试访问它,但是出现以下错误:

platform-browser.umd.js:962 ORIGINAL EXCEPTION: Expression has changed after it was checked. Previous value: '8 Minutes ago'. Current value: '9 Minutes ago'
Run Code Online (Sandbox Code Playgroud)

我通过一种方法从API读取数据(日期)一次。

searchPeople(name)
{
    this.loading = true;
    this.http.get(this.BASE_URL + 'mode=search&name='+name)
      .map((res:Response) => res.json())
      .subscribe(
        data => {       
            this.loading = false;
            this.people = data;
            this.searchedName = name;
        },
        error => {
          console.log(error.text());
        }
      );
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Gün*_*uer 1

该问题是由于管道amTimeAgo为相同的输入返回不同的输出而引起的。显然,随着时间的推移,您将comment.create_at与进行比较,这会导致不同的输出。Date.now()

这是一个不纯的管道,你需要通过设置告诉 Angular pure: false

@Pipe({ 
  name: 'amTimeAgo',
  pure: false
})
class AmTimeAgoPipe {
  ...
}
Run Code Online (Sandbox Code Playgroud)