печать экрана с помощью angular5 не может получить значения в нем - PullRequest
0 голосов
/ 19 сентября 2018

Здесь я пытаюсь получить значения на экране печати, но я получаю пустые значения , которые я прикрепил ниже скриншот .Все, что я хочу получить значения на экране печати, или это любые модули для него


это мой файл component.ts

  printDiv() {
    const divContents = document.getElementById('dvContents').innerHTML;
    const printWindow = window.open('', '');
    printWindow.document.write('<html><head><title>Process Compensation Report</title>');
    printWindow.document.write('</head><body style="color: black">');
    printWindow.document.write(divContents);
    printWindow.document.write('</body></html>');
    printWindow.document.close();
    printWindow.print();
  }


здесь HTMLфайлы

<section id="dvContents" style="color: white;" class="form_cont">
        <div class="container">
            <div class="row mt-20">
                <div class="col-md-4 col-sm-4 text-right res-tleft">
                    <label>Name</label>
                </div>
                <div class="col-md-4 col-sm-4">
                    <input type="text" [(ngModel)]="name" > **// this is not printing**
                </div>
                <div class="col-md-4 col-sm-4" *ngIf="arcButt">
                    <button class="btn btn-gradient-txt" type="button" (click)="archiveButt();">
                        <span style="font-size: 14px">
                            <i class="fa fa-file-archive-o"></i> Archive</span>
                    </button>
                 </div>
            </div>


вот скриншот картинки, здесь я получаю распечатку, но с пустым полем ввода.
ScreenShot enter image description here

1 Ответ

0 голосов
/ 19 сентября 2018

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

Пустьмне объяснить.Предположим, у вас есть следующий html (на данный момент забудьте об angular):

<input type="text" value="42" >

Это входной файл, введите «текст».К нему мы применили атрибут.

value="42"

Теперь вы предполагали, что изменение значения поля ввода изменит значение атрибута - возможно, вы, хотя они были одинаковыми.Это распространенная ошибка: на самом деле свойство (значение) объекта (узла элемента) - это одно, а атрибут (значения) - другое.Они явно связаны, но не одинаковы.

Может быть, пример может прояснить это:

element.value = "42"

Это установит "значение" свойство элементадо "42".На значение атрибута это не влияет.Следующее вместо этого установит значение атрибута равным "42"

element.setAttribute("value", "42")

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

Взяты из Угловые - атрибут HTML противСвойство DOM :

Например, когда браузер отображает <input type="text" value="Bob">, он создает соответствующий узел DOM со свойством значения, инициализированным как «Bob».

Когда пользователь вводит «Sally» в поле ввода, свойство значения элемента DOM становится «Sally».Но атрибут значения HTML остается неизменным, когда вы обнаружите, если спросите у элемента ввода об этом атрибуте: input.getAttribute('value') возвращает «Боб».

В качестве доказательства, пожалуйста, рассмотрите следующий пример - который не 'т даже использовать угловой:

function showInnerHtml() {
  console.log(document.getElementById('questionField').innerHTML);
}
<div id="questionField">
  <input id="questionField" type="text" value="420">
  <button type="button" onClick="showInnerHtml()">Button</button>
</div>

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

Итак, то, что вы пытаетесь сделать, само по себе невозможно.

Тем не менее, еслиВы действительно должны, есть возможный (необоснованный для работы в любом браузере) обходной путь.Angular может использовать специальный синтаксис [attr.name] для привязки к значению атрибута.Это означает, что вы действительно можете создать привязку к свойству значения атрибута HTML.

Пожалуйста, обратитесь к этому стеку для быстрого POC этого , и не стесняйтесь спрашивать дополнительные разъяснения, еслинеобходимо.

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