上面这个方法报错Cannot read property 'querySelector' of undefined
时间: 2023-12-10 07:43:28 浏览: 265
抱歉,我在之前的回答中犯了一个错误。由于 Vue 组件的生命周期,我们不能直接在 `deleteRow` 方法中使用 `document.querySelector` 来选择要删除的行。相反,我们应该通过 Vue 的引用来操作 DOM 元素。
下面是一个修正后的示例代码:
```html
<template>
<div>
<van-swipe-cell v-for="(item, index) in list" :key="index" @delete="deleteRow(index)" ref="swipeCells">
<!-- 行的内容 -->
</van-swipe-cell>
</div>
</template>
<script>
export default {
data() {
return {
list: [/* 列表数据 */]
}
},
methods: {
deleteRow(index) {
const swipeCells = this.$refs.swipeCells;
swipeCells[index].$el.classList.add('slide-up-animation');
setTimeout(() => {
this.list.splice(index, 1);
}, 500); // 等待动画结束后再删除行
}
}
}
</script>
<style>
.slide-up-animation {
animation: slide-up 0.5s ease-in-out;
}
@keyframes slide-up {
from {
transform: translateY(0);
}
to {
transform: translateY(-100%);
}
}
</style>
```
在修正后的代码中,我们通过 `this.$refs.swipeCells` 来获取到所有的 `van-swipe-cell` 组件实例,并通过 `index` 来选择要删除的行。然后,我们为该行添加了 `.slide-up-animation` 类,并等待 500ms 后再从数据源中删除该行。
请注意,由于动画的持续时间为 0.5s,我们将删除操作延迟了 500ms,以确保动画能够完全播放。
希望这次能解决你的问题。如果还有其他疑问,请随时提问。
阅读全文