【问题标题】:render function or template not defined in component: Swiper组件中未定义的渲染函数或模板:Swiper
【发布时间】:2021-01-23 09:45:20
【问题描述】:

我在nuxt.js 中使用swiper。我尝试了他们文档中的示例,但出现错误:

<template>
  <swiper
    :slides-per-view="3"
    :space-between="50"
    navigation
    :pagination="{ clickable: true }"
    :scrollbar="{ draggable: true }"
    @swiper="onSwiper"
    @slideChange="onSlideChange"
  >
    <swiper-slide>Slide 1</swiper-slide>
    <swiper-slide>Slide 2</swiper-slide>
    <swiper-slide>Slide 3</swiper-slide>
    ...
  </swiper>
</template>
<script>
// import Swiper core and required components
import SwiperCore, { Navigation, Pagination, Scrollbar, A11y } from 'swiper';

// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue';

// Import Swiper styles
import 'swiper/swiper.scss';
import 'swiper/components/navigation/navigation.scss';
import 'swiper/components/pagination/pagination.scss';
import 'swiper/components/scrollbar/scrollbar.scss';

// install Swiper components
SwiperCore.use([Navigation, Pagination, Scrollbar, A11y]);

// Import Swiper styles
export default {
  components: {
    Swiper,
    SwiperSlide,
  },
  methods: {
    onSwiper(swiper) {
      console.log(swiper)
    },
    onSlideChange() {
      console.log('slide change')
    },
  },
};
</script>

浏览器出错

终端控制台中的控制台警告

我的 package.json

【问题讨论】:

    标签: javascript vue.js nuxt.js render swiper


    【解决方案1】:

    如果您使用的是较新版本的 nuxtjs,请将容器包装在 &lt;client-only&gt;&lt;/client-only&gt; 中。旧版本使用&lt;no-ssr&gt;&lt;/no-ssr&gt;

    【讨论】:

    • 我用的是ssr,会不会影响我的应用
    • 我做到了,但没有显示出来。我发现swipper vue 只支持vue 3
    【解决方案2】:

    Swiper docs 状态:

    Swiper Vue.js 组件仅与新的 Vue.js 版本 3 兼容。

    Nuxt 2.x 当前使用的是 Vue 2,这会导致您提到的错误。一种解决方法是使用带有 HTML 的 Swiper 的 API,如下面的组件所示:

    <template>
      <div class="swiper-container">
          <!-- Additional required wrapper -->
          <div class="swiper-wrapper">
              <!-- Slides -->
              <div class="swiper-slide">Slide 1</div>
              <div class="swiper-slide">Slide 2</div>
              <div class="swiper-slide">Slide 3</div>
              ...
          </div>
          <!-- If we need pagination -->
          <div class="swiper-pagination"></div>
    
          <!-- If we need navigation buttons -->
          <div class="swiper-button-prev"></div>
          <div class="swiper-button-next"></div>
    
          <!-- If we need scrollbar -->
          <div class="swiper-scrollbar"></div>
      </div>
    </template>
    
    <script>
    import Swiper, { Navigation, Pagination } from 'swiper'
    import 'swiper/swiper-bundle.css'
    
    Swiper.use([ Navigation, Pagination ])
    
    export default {
      mounted() {
        new Swiper('.swiper-container', {
          loop: true,
          pagination: {
            el: '.swiper-pagination',
          },
          navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
          },
          scrollbar: {
            el: '.swiper-scrollbar',
          },
        })
      }
    }
    </script>
    
    <style scoped>
    .swiper-container {
      width: 600px;
      height: 300px;
    }
    </style>
    

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2019-12-08
      • 2020-07-28
      • 2018-05-08
      • 2017-02-13
      • 2018-07-05
      • 2020-02-02
      • 2020-04-26
      • 2019-07-02
      相关资源
      最近更新 更多