【发布时间】:2021-12-03 23:17:34
【问题描述】:
我正在尝试将我自己的自定义按钮链接到 nuxt 应用程序中的轻弹轮播。我的父组件将属性direction 的默认值设置为left。
<CarouselBase class="w-screen carousel" :direction="direction">
<items/>
</CarouselBase>
data() {
return {
direction: 'left',
},
这是我的轮播组件的代码。
<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
import Vue from 'vue'
import Flickity from 'vue-flickity'
Vue.component('Flickity', Flickity)
我收到此错误消息 =>
Cannot read properties of undefined (reading 'previous')
我不知道如何解决这个问题...
【问题讨论】:
-
为什么不尝试从组件内部的“vue-flickity”而不是插件中导入 Flickity,并将其添加到“组件”属性中?因为到目前为止,由于某种原因,Flickity 似乎没有从插件中获取。
-
你到底想在这里做什么?在
mounted()上滑动滑块?您不应该像文档中那样使用带有@click的方法吗?反正组件挂载了直接滑动有什么意义? -
@StasParshin 这个不起作用,因为包不处理 SSR 并且只是崩溃。我们在作者之前的一个问题中发现了这一点。
-
我不想在挂载时直接滑动滑块,但我将其初始化为“左”而不是空字符串(“”),以便查看道具“左”时会发生什么原因很简单,现在我不知道如何在道具更改值时重新渲染轮播。无论如何,现在我刚刚尝试使用文档中的 @click 并收到相同的错误消息。
-
你实际上不需要在这里初始化任何东西。轮播的内部状态将为您处理
previous和next步骤。你也不需要让它重新渲染。你可以使用你的 Vue 开发工具,用$vm0包裹元素并手动切换它,它会正确移动。你能用你迄今为止尝试过的内容来编辑你的问题吗?
标签: javascript vuejs2 nuxt.js flickity