Перерисовывать угловой компонент периодически - PullRequest
0 голосов
/ 19 декабря 2018

У меня возникла проблема с обновлением отображаемого относительного времени.

У меня есть поле, скажем created_at, которое я помещаю через канал, который дает мне результат как ПростоТеперь , 1 минуту назад и т. Д.

Код выглядит примерно так

<div>{{ created_at | conversationTime }}</div>

Теперь я хочу обновлять эти значения каждую минуту, поэтомуЯ делаю

setPeriodicRefresh(minutes) {
    setInterval(() => {
      this.cdr.detectChanges();
    }, 1 * 1000 * 60);
  }

Но проблема в том, что обнаружение угловых изменений работает, если есть какие-либо данные, измененные, и в этом случае мои данные, т.е. created_at, не изменяются, но значение, которое я генерирую с его помощьютруба.

Кто-нибудь может мне помочь, как мне пройти через это?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Всякий раз, когда значение какого-либо свойства изменяется при обнаружении углового изменения компонента, например,

component.ts

time = 0;

ngOnInit() {
    setInterval(() => {
      this.time++;
    }, 1000)
}

component.html

<div>{{time}}</div>
0 голосов
/ 19 декабря 2018

Как вы говорите, angular не будет перерисовывать вашу трубу, потому что он запоминает результат.

По умолчанию angular делает все трубы "чистыми", что означает, что они являются идемпотентными.

Путем изменения трубычтобы быть pure: false трубой, она будет работать на каждом проходе.

@Pipe({
  ...
  pure: false
})

https://angular.io/guide/pipes#pure-and-impure-pipes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...