前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vuepress引入vue-qr组件后build报错navigator is not defined问题

vuepress引入vue-qr组件后build报错navigator is not defined问题

作者头像
薛定喵君
发布2020-09-15 10:36:46
1.5K0
发布2020-09-15 10:36:46
举报
文章被收录于专栏:薛定喵君薛定喵君

记下vuepress引入外部组件后build报错问题

最近博客中集成了vue-qr组件用于生成访问的二维码.

组件安装

代码语言:javascript
复制
npm install vue-qr

自定义组件代码

Qrcode.vue

代码语言:javascript
复制
<template>
  <div class="vue-qrcode-box">
    <vue-qr :text="qrUrl" :size="114" :margin="5"></vue-qr>
  </div>
</template>

<script>
import vueQr from 'vue-qr'
export default {
  name: 'qr-code',
  components: {
    vueQr
  },
  data() {
    return {
      qrUrl: ''
    }
  },
  mounted: function() {
    const that = this
    setTimeout(() => {
      that.qrUrl = location.origin + that.$route.path
    }, 0)
  },
  watch: {
    $route(to, from) {
      if (from.path != to.path) {
        this.qrUrl = location.origin + this.$route.path
      }
    }
  },
  methods: {},
  created() {}
}
</script>

<style scoped>
.vue-qrcode-box img {
  width: 100%;
}
</style>

组件引用

如果直接引入会报如下错误

原因:所有的页面在生成静态 HTML 时都需要通过 Node.js 服务端渲染,所有的 Vue 相关代码都应当遵循 编写通用代码 的要求。 要确保只在 beforeMount 或者 mounted 访问浏览器 / DOM 的 API。

如果一些组件或库在导入时就试图访问浏览器 API ,需要在合适的生命周期钩子中动态导入。

这里引用的 vue-qr 应该是使用了 navigator 的 API,所以就选择在单页的mounted里动态引入的方式来解决构建时的报错问题:

代码语言:javascript
复制
<template>
  <component v-if="qrcode" :is="qrcode"></component>
</template>
<script>
export default {
  data() {
    return {
      qrcode: null
    }
  },
  mounted () {
    import('./Qrcode').then(module => {
      this.qrcode = module.default
    })
  }
}
</script>

效果

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 组件安装
  • 自定义组件代码
  • 组件引用
  • 效果
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档