如何在不丢失样式的情况下打印Vue组件的一部分

坦美

我想从vue组件中打印一些内容。例如,从以下代码段中,我想打印v-card-text一个ID也为的元素#print

new Vue({
  el: '#app',
  data() {
    return {
      dialog: false
    }
  },
  methods: {
    print() {
      var prtContent = document.getElementById("print");
      var WinPrint = window.open('', '', 'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');
      WinPrint.document.write(prtContent.innerHTML);
      WinPrint.document.close();
      WinPrint.focus();
      WinPrint.print();
      WinPrint.close();
    }
  }
})
<!doctype html>
<html>

<head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/vuetify/1.2.0/vuetify.min.css" />
</head>

<body>
  <div id="app">
    <v-app id="inspire">
      <v-layout row justify-center>
        <v-dialog v-model="dialog" persistent max-width="290">
          <v-btn slot="activator" color="primary" dark>Open Dialog</v-btn>
          <v-card>
            <v-card-title class="headline">Print This:</v-card-title>
            <v-card-text id="print">Lorem ipsum dolor sit amet.</v-card-text>
            <v-card-actions>
              <v-spacer></v-spacer>
              <v-btn color="green darken-1" flat @click.native="print">Print</v-btn>
          </v-card>
        </v-dialog>
      </v-layout>
    </v-app>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vuetify/1.2.0/vuetify.min.js"></script>
</body>

</html>

但是,当系统提示我进行打印时,与之相关的所有样式都会消失。如何以这种方式打印Vue组件,以使组件不会丢失相关的样式?我建议将代码段复制到本地计算机上以达到最佳效果。

十年月亮

您需要复制原始文档中的样式。尝试这样的事情:

// Get HTML to print from element
const prtHtml = document.getElementById('print').innerHTML;

// Get all stylesheets HTML
let stylesHtml = '';
for (const node of [...document.querySelectorAll('link[rel="stylesheet"], style')]) {
  stylesHtml += node.outerHTML;
}

// Open the print window
const WinPrint = window.open('', '', 'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');

WinPrint.document.write(`<!DOCTYPE html>
<html>
  <head>
    ${stylesHtml}
  </head>
  <body>
    ${prtHtml}
  </body>
</html>`);

WinPrint.document.close();
WinPrint.focus();
WinPrint.print();
WinPrint.close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不重复定界字符串的情况下使用javascript正则表达式删除字符串的一部分

如何在不进行节编号的情况下使rmarkdown文档成为一部分?

如何在组件B中呈现组件A的一部分

如何使用neo4j密码匹配路径,并在不存在一部分的情况下返回其余部分

如何在不始终打开Outlook的情况下开发和测试Outlook加载项的一部分?

如何在不使用ID的情况下导航到页面的一部分

在不使用invalidate(Rect)的情况下仅更新View的一部分

如何在React Native的TextInput中为文本的一部分应用样式?

如何在不提交的情况下使用jQuery Validator验证表单的第一部分?

如何在React中为正文文本的一部分添加样式

如何在未创建新的子目录的情况下获取URL的最后一部分以在父目录中进行处理

如何在不使用html标签的情况下对文本的一部分进行样式设置?

如何在不重新启动应用程序的情况下使我的C#应用程序的一部分动态加载?

如何在保留旧名称一部分的情况下使用新名称复制文件?

如何在不创建临时字符串的情况下将字符串的一部分转换为int / float / vector3等?

如何在不复制的情况下删除二进制文件的一部分

如何在不创建新列表的情况下在Python中获得列表的一部分?

仅在具有变量的情况下显示主题的一部分

如果计算机是域的一部分,如何在Windows下共享家用打印机?

如何在不创建子矩阵的情况下在Matlab中求和矩阵的一部分?

仅在不包含给定部分的情况下替换URL的一部分

R:如何在不使用先前子集的情况下对df的一部分进行计算?

如何在没有协议或域的情况下获得URL的一部分

如何在不重新加载整个站点的情况下替换站点的一部分?

如何在不知道结果的情况下获取输出的一部分

如何在 Flutter 中设置文本的一部分样式?

如何从页面打印一部分?

如何下载 React 组件的一部分?

在列表的情况下删除垂直边框线的最后一部分