Angular 8 не ждет, пока новое представление будет отображено в представлении - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь напечатать документ с помощью window.print (), но angular не ждет, пока будет отображено новое значение. Он продолжает печатать старое значение.

Я пытаюсь напечатать сразу после назначения нового значения для объекта, подобного этому

obj1.attr1 = "new value"
window.print()

Браузер продолжает печатать старое значение. Как напечатать новое значение вместо?

Ответы [ 3 ]

1 голос
/ 01 ноября 2019

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

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

import { ChangeDetectorRef } from '@angular/core';

constructor(private cd: ChangeDetectorRef) { }

// ...

obj1.attr1 = "new value";
this.cd.detectChanges();
window.print();
1 голос
/ 01 ноября 2019

Вы можете добавить тайм-аут с небольшим значением.

setTimeout(() => window.print());
0 голосов
/ 01 ноября 2019

Существует rxjs-оператор observe, который можно использовать для наблюдения изменений с определенным объектом:

import { observe } from "rxjs-observe";
// ...
const obj1 = { attr1: "init" };
const { observables, proxy } = observe(obj1);

// when attr1 of obj1 changed then window.print is called
observables.attr1.subscribe(() => window.print());
// ...
// assign a new value to the property of obj1
proxy.attr1 = "new value";

Эту операцию observe можно найти здесь

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