首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当子组件通过Flickity的旋转木马呈现时,Nuxt应用程序抛出“无法读取未定义的属性”

当子组件通过Flickity的旋转木马呈现时,Nuxt应用程序抛出“无法读取未定义的属性”
EN

Stack Overflow用户
提问于 2021-10-15 19:58:26
回答 2查看 372关注 0票数 2

我正在尝试将我自己的自定义按钮链接到nuxt应用程序中的flickity carousel。我的父组件将属性direction的默认值设置为left

代码语言:javascript
复制
<CarouselBase class="w-screen carousel" :direction="direction">
  <items/>
</CarouselBase>

data() {
  return {
    direction: 'left',  
  },

这是我的carousel组件的代码。

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

<script>

export default {
    name: 'BaseCarousel',
    props: {
        direction: {
            type: String,
            default: '',
        },
    },
    mounted() {
        if (this.direction === 'right') {
            this.$refs.flickity.next()
        } else if (this.direction === 'left') {
            this.$refs.flickity.previous()
        }
    },
    
}

我在我的插件文件夹中有这个文件vue-flickity.js

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

Vue.component('Flickity', Flickity)

我收到此错误消息=>

代码语言:javascript
复制
Cannot read properties of undefined (reading 'previous')

我不知道该怎么解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2021-10-16 06:51:38

flickity模板引用在mounted钩子中还不可用,因为<Flickity>将在下一个周期中呈现。

mounted()中访问模板ref之前,等待$nextTick() callback的下一个呈现周期

代码语言:javascript
复制
export default {
  async mounted() {
    // wait until next render cycle for refs to be available
    await this.$nextTick()

    if (this.direction === 'right') {
      this.$refs.flickity.next()
    } else if (this.direction === 'left') {
      this.$refs.flickity.previous()
    }
  },
}

demo

票数 0
EN

Stack Overflow用户

发布于 2021-10-16 12:18:32

将carousel作为一个组件,如下所示

代码语言:javascript
复制
<template>
  <ClientOnly>
    <Flickity ref="flickity">
      <slot />
    </Flickity>
  </ClientOnly>
</template>

export default {
    name: 'BaseCarousel',
}

并通过我自己的自定义按钮在我的索引中使用它

代码语言:javascript
复制
<template>
  <CarouselBase ref="flickityIndex">
    <items for the carousel/>
  </CarouselBase>
  <button @click="previous">Custom Previous Button</button>
  <button @click="next">Custom Next Button</button>
</template>

export default {
     methods: {
    next() {
      this.$refs.flickityIndex.$refs.flickity.next();
    },
    
    previous() {
      this.$refs.flickityIndex.$refs.flickity.previous();
    }
  }
}

调用下一个或上一个需要通过两个$refs连接到flickity

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

https://stackoverflow.com/questions/69590009

复制
相关文章

相似问题

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