vue中实现dialog显示二维码

安装qrcode

cnpm install qrcodejs2

在main.js全局引用

import QRCode from 'qrcodejs2'
Vue.prototype.$QRCode = function()
{
  let qrcode = new QRCode('qrcode', {
    width: 232,  // 设置宽度
    height: 232, // 设置高度
    text: ‘12345’,
  });
};

页面调用

this.qrcode = this.$QRCode()

案例分析
本人案例是在用户的信息表格末尾添加一个生成二维码的按钮,可以把本行内容全部显示成二维码,按钮会调用一个dialog,用于显示二维码。由于dialog加载过程会耗费一定时间,因此在dialog中直接调用会导致第一次打开的dialog无法加载二维码,之后加载才正常,经过研究dialog属性之后对dialog属性增加一个修改就实现完美加载。调用示例如下:

表格按钮


	

dialog属性此处一定要添加 @opened=“ShowQRCode()”,opended是dialog动画打开完毕时候的回调,当页面加载完毕时才会加载ShowQRCode(),可以解决因dialog加载延时导致的二维码不显示问题。不过二维码显示会有一点点延时,半秒以内,不影响应用。


  

获取本行信息并且打开dialog,index是表格行数,row存表格字段信息

ShowQRCodeDialog(index,row)
{
   this.qrCode = row
   this.DialogShowQRCode = true
   document.getElementById("qrcode").innerHTML = "";
},

调用二维码生成函数

ShowQRCode()
{
 document.getElementById("qrcode").innerHTML = "";
 this.qrcode = this.$QRCode()
}

拓展
vue还有一个directives属性可以实现页面打开时的自动点击事件,最开始我的想法是dialog加载完毕自动点击按钮执行二维码生成,不过也存在缺点,仅供参考。

directives:
{
  trigger:
  {
    update(el,binding)
    {
      el.click()
    }
  }
},

页面调用
二维码展示
每次页面打开时会自动执行ShowQRCode()函数,关于钩子函数update的说明如下:
bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。 inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。 update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。 componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。 unbind: 只调用一次, 指令与元素解绑时调用。
我使用的inserted和update,但是无法解决第一次加载dialog时无法显示二维码的问题。不过在一些需要用到自动点击命令时还有有帮助的。

你可能感兴趣的:(vue)