美文网首页前端开发那些事儿
【vue+elementui】打印dialog弹窗内容

【vue+elementui】打印dialog弹窗内容

作者: IrisLong | 来源:发表于2020-06-23 11:33 被阅读0次
    难度值:⭐
    需求描述:使用vue+elmentui,打印dialog弹窗里面的内容
    方法一: PASS
    let oldHtml = document.body.innerHTML
    document.body.innerHTML = document.getElementById('dialogContent').innerHTML
    window.print()
    document.body.innerHTML = oldHtml
    

    代码如上,dialogContent 指代的是需要打印的内容区域,因为只打印页面中弹窗内的部分,所以将id为dialogContent的div替换了原body的innerHTML,打印后再替换为原本的body

    但是在打印过程中,遇到了一个问题
    1、初次打印,可以打印页面,但是打印完毕后,页面按钮全部失灵且无法再进行任何操作了

    原因:
    猜测可能是因为innerHTML造成动态绑定事件丢失的原因
    查资料,大部分建议是使用appendChild()替代innerHTML,无奈水平有限,尝试了几次后还是没有折腾出来

    方法二:vue-print-nb
    1. 安装依赖
    cnpm i vue-print-nb -S
    
    2. 在main.js/index.js里面引入
    import Print from 'vue-print-nb'
    Vue.use(Print)
    
    3. 在需要打印的位置使用
    <div id="dialogContent">
      <p style="text-align: center">
        {{ form.status === '条件' ? '标题一' : '标题二' }}
      </p>
      <div class="table-layout">
        <!--内容-->
      </div>
    </div>
    
    4. 打印
    <button v-print="'#dialogContent'">打印</button>
    

    缺点:
    只能打印可见区域,不能分页打印

    方法二:print.js

    源码地址

    1. 安装依赖
    cnpm install vuePlugs_printjs -S
    
    2. 引入
    import Print from '@/plugins/print'   // 下载到本地地址
    Vue.use(Print)
    
    3. 使用
    <template>
        <div ref="print">
        <!--打印内容-->
        <div class="no-print">不要打印我</div>
        </div>
        <a-button @click="prints">打印</a-button>
    </template>
    <script>
    export default {
      data () {
        return {}
      },
      methods: {
        prints () {
          this.$print(this.$refs.print)
        }
      }
    }
    </script>
    

    注意:
    需使用ref获取dom节点,若直接通过id或class获取则webpack打包部署后打印内容为空

    指定不打印区域
    方法一. 添加no-print样式类

    <div class="no-print">不要打印我</div>
    

    方法二. 自定义类名

    <div class="do-not-print-me-xxx">不要打印我</div>
    this.$print(this.$refs.print,{'no-print':'.do-not-print-me-xxx'}) // 使用
    

    相关文章

      网友评论

        本文标题:【vue+elementui】打印dialog弹窗内容

        本文链接:https://www.haomeiwen.com/subject/sxgcfktx.html