首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Flickity时Nuxt应用程序抛出错误消息

使用Flickity时Nuxt应用程序抛出错误消息
EN

Stack Overflow用户
提问于 2021-10-14 13:30:26
回答 3查看 138关注 0票数 1

我正在尝试在Nuxt应用程序中实现一个carousel。这是我的package.json

代码语言:javascript
复制
 "dependencies": {
    "@nuxtjs/i18n": "^7.0.3",
    "core-js": "^3.15.1",
    "flickity": "^2.2.2",
    "lodash": "^4.17.21",
    "nuxt": "^2.15.7",
    "postcss-nesting": "^8.0.1",
    "throttle-debounce": "^3.0.1",
    "vue-flickity": "^1.2.1"
  },

这是我的代码

代码语言:javascript
复制
<template>
  <ClientOnly>
    <Flickity
      ref="flickity"
      :key="keyIncrementer"
      class="carousel"
      :class="{ 'carousel--active': active }"
      :options="computedOptions"
    >
      <slot />
    </Flickity>
  </ClientOnly>
</template>

<script>

import Flickity from 'vue-flickity'

const DEFAULT_OPTIONS = {
  cellAlign: 'left',
  pageDots: true,
  prevNextButtons: true
}
export default {
  components: {
    Flickity,
  },
  name: 'BaseCarousel',
  props: {
    active: {
      type: Boolean,
      default: true
    },
    options: {
      type: Object,
      required: false,
      default: () => ({})
    }
  },

如果我没有注释掉import Flickity from 'vue-flickity'components: { Flickity, },,我会得到这个错误消息。

我不明白这里出了什么问题。如果有人知道请帮忙..。

EN

回答 3

Stack Overflow用户

发布于 2021-10-14 13:56:29

将其作为插件导入是一种解决方案,如下所示:https://github.com/drewjbartlett/vue-flickity/issues/38#issuecomment-906280271

同时,它根本不是最优的。

Importing it with a dynamic import可能是一个解决方案,我正在尝试找到一种正确编写它的方法。

更新的答案

这看起来在我这边工作正常,你能确认一下吗?

代码语言:javascript
复制
<template>
  <ClientOnly>
    <Flickity
      ref="flickity"
      :key="keyIncrementer"
      class="carousel"
      :class="{ 'carousel--active': active }"
      :options="computedOptions"
    >
      <slot />
    </Flickity>
  </ClientOnly>
</template>

<script>
import Vue from 'vue'

const DEFAULT_OPTIONS = {
  cellAlign: 'left',
  pageDots: true,
  prevNextButtons: true,
}

export default {
  name: 'BaseCarousel',
  props: {
    active: {
      type: Boolean,
      default: true,
    },
    options: {
      type: Object,
      required: false,
      default: () => ({}),
    },
  },
  async mounted() {
    if (process.browser) {
      const Flickity = await import('vue-flickity')
      Vue.component('Flickity', Flickity)
    }
  },
}
</script>
票数 2
EN

Stack Overflow用户

发布于 2021-10-14 15:36:24

您是否在plugins/vue-flickity.js中添加了类似以下内容:

代码语言:javascript
复制
import Vue from 'vue'
import Flickity from 'vue-flickity'

Vue.component('Flickity', Flickity)

同时添加到nuxt.config.js

代码语言:javascript
复制
plugins: [
  { src: '~/plugins/vue-flickity.js', ssr: false },
]
票数 2
EN

Stack Overflow用户

发布于 2021-10-16 07:03:07

另一种解决方法是仅在客户端上将vue-flickity本地注册为async component

代码语言:javascript
复制
export default {
  components: {
    [process.browser && 'Flickity']: () => import('vue-flickity'),
  }
}

demo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69571622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档