Как вручную выполнить рендеринг компонента в Angular2? - PullRequest
1 голос
/ 18 марта 2019

Я использую ng Smarttable и изменяю массив источника данных через событие (изменение - это изменение идентификатора значения внутри массива). Проблема в том, что angular не обнаруживает изменения, и ничего не происходит, пока я не наведу курсор на страницу или не щелкну где-нибудь.

Таким образом, изменения корректно применяются за кулисами, и угловой «видит» эти изменения, когда я щелкаю куда-то.

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

Я пытался:

  1. использование ChangeDetectorRef внутри функции, в которой я изменяю массив (markAsChanged & DetectChange)
  2. ручное создание события щелчка при изменении массива
  3. Использование неизменяемости ( this.data = [... this.data]; )

Возможно ли иметь что-то подобное?

this.renderer.refresh();

или использовать только функциональность ng smartable?

РЕДАКТИРОВАТЬ: похоже, проблема была на моей стороне. Когда вы «обновляете» смарт-таблицу, вы получаете обещание, которое выполняется только после завершения загрузки.

Я не использовал обещание. Помещение обычного DetectChange () в обещание заставило его работать

1 Ответ

3 голосов
/ 18 марта 2019

Вы можете выполнить повторную визуализацию вручную, используя приложение ref.

Добавьте ApplicationRef в ваш компонент.

constructor(appRef: ApplicationRef) {}

Затем вызывайте тиковый метод всякий раз, когда вы хотите выполнить рендеринг.

appRef.tick();
...