首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用vuejs和nuxtjs安装flickity旋转木马

如何使用vuejs和nuxtjs安装flickity旋转木马
EN

Stack Overflow用户
提问于 2017-11-15 02:53:40
回答 3查看 7.5K关注 0票数 3

我是一个新的vuejs开发人员。我学习vueje有一段时间了,现在我决定用vuejs开发一个项目。

因此,我了解了nuxtjs,它是服务器端呈现。万事如意。我可以在我的项目中使用bootstrap4。

现在我想在我的项目中使用flickity旋转木马https://flickity.metafizzy.co,我发现https://github.com/drewjbartlett/vue-flickity上有一个vuejs包。

我按照指导如何将此组件安装到我的项目中

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

然后加上一些代码

代码语言:javascript
复制
<script>
  import Logo from '~/components/Logo.vue'
  import Searchbar from '~/components/Searchbar.vue'
  import axios from 'axios'
  import Flickity from 'vue-flickity';

  export default {
    data () {
      return {
        has_location: false,
        flickityOptions: {
          initialIndex: 3,
          prevNextButtons: false,
          pageDots: false,
          wrapAround: true
        }
      }
    },
    components: {
      Logo,
      Searchbar,
      Flickity
    }
  }
</script>

但是它显示窗口没有被定义为

我已经尝试了另一个组件,如谷歌地图,它显示了同样的错误。

请告诉我,我做错了什么,以及如何安装新的组件的项目。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-11-15 12:51:48

Nuxt.js使用SSR呈现网站服务器端,因此window对象在node.js环境下不可访问。

您需要做的是使用组件来防止Nuxt.js在服务器端呈现它。

您可以简单地这样做:

代码语言:javascript
复制
<no-ssr>
  <Flickity :options="...">
    <!-- slides -->
  </Flickity>
</no-ssr>

更新:如果此时仍有错误,则在禁用ssr的自定义插件中加载Flickity

创建一个名为plugins/VueFlickity.js的文件

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

Vue.component('Flickity', Flickity)

然后在您的nuxt.config.js中添加:

代码语言:javascript
复制
module.exports = {
  // ...
  plugins: [
    { src: '~/plugins/VueFlickity.js', ssr: false }
  ]
}

不要忘记删除Flickity本地组件注册:

代码语言:javascript
复制
components: {
  Logo,
  Searchbar
  // Flickity <-- remove this line
}

这是经过测试的,现在正在充分发挥作用。

票数 7
EN

Stack Overflow用户

发布于 2020-04-02 13:52:20

我用:

代码语言:javascript
复制
let Flickity = {};
if (process.browser) {
    Flickity = require('flickity.js');
}
票数 1
EN

Stack Overflow用户

发布于 2022-01-05 09:20:00

@rayfranco指出了一个很好的方法。:)通过这样做,您可以在全球范围内导入这个插件,而不是作为性能更好的本地组件导入。所以你也可以这样做:

代码语言:javascript
复制
let Flickity;

if (process.client) {
     Flickity = require('vue-flickity')
}

      
export default {
    components: {
       Flickity
    } 
}

并以这种方式使用此组件:

重要事项:在Nuxt > 2.9中不推荐<no-ssr>......</no-ssr>,所以请使用

代码语言:javascript
复制
<client-only>
  <Flickity :options="...">
    <div class="carousel-cell">1</div>
    <div class="carousel-cell">2</div>
    <div class="carousel-cell">3</div>
  </Flickity>
</client-only>

您还可以查看Josh Deltener https://deltener.com/blog/common-problems-with-the-nuxt-client-only-component/的简短示例。

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

https://stackoverflow.com/questions/47298588

复制
相关文章

相似问题

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