gpt4 book ai didi

javascript - 在 VueJS 中使用观察者?

转载 作者:行者123 更新时间:2023-12-02 20:52:38 29 4
gpt4 key购买 nike

我正在尝试在 VueJS 中使用 Watchers,但我很难理解它们。例如,在本例中,我设置了一个 watch 来检查我所在的选项卡,如果选项卡发生更改,它应该将 selected 值重置回空数组。现在我已将参数设置为 oldValuenewValue 但我不太确定如何使用它们。

检查这个codepen .

这是完整的示例:-

new Vue({
el: "#app",
data() {
return {
tabs: ["Tab1", "Tab2"],
activeTab: 0,
headers: [{
text: "Dessert (100g serving)",
align: "left",
value: "name"
},
{
text: "Calories",
value: "calories"
}
],
items: [{
name: "Ice cream sandwich",
calories: 237
},
{
name: "Frozen Yogurt",
calories: 159
}
],
selected: []
};
},
methods: {
toggleAll() {
if (this.selected.length) this.items = [];
else this.selected = this.items.slice();
}
},
watch: {
activeTab: (oldValue, newValue) => {
if (oldValue !== newValue) {
this.selected = [];
}
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.css" rel="stylesheet" />

<div id="app">
<v-app id="inspire">
<v-tabs fixed-tabs v-model="activeTab">
<v-tab v-for="tab in tabs" :key="tab">
{{ tab }}
</v-tab>
<v-tab-item v-for="tab in tabs" :key="tab">
<v-data-table v-model="selected" :headers="headers" :items="items" select-all item-key="name" class="elevation-1" hide-actions>
<template v-slot:headers="props">
<tr>
<th>
<v-checkbox :input-value="props.all" :indeterminate="props.indeterminate" primary hide-details @click.stop="toggleAll"></v-checkbox>
</th>
<th v-for="header in props.headers" :key="header.text">
<v-icon small>arrow_upward</v-icon>
{{ header.text }}
</th>
</tr>
</template>
<template v-slot:items="props">
<tr :active="props.selected" @click="props.selected = !props.selected">
<td>
<v-checkbox :input-value="props.selected" primary hide-details></v-checkbox>
</td>
<td>{{ props.item.name }}</td>
<td>{{ props.item.calories }}</td>
</tr>
</template>
</v-data-table>
</v-tab-item>
</v-tabs>
</v-app>
</div>

我不太确定如何使用那 block watch ,所以如果有人可以帮助我,我肯定会很感激。谢谢。

最佳答案

您正在为activeTab使用粗箭头函数,它必须是一个普通函数,否则它没有对this的正确引用

更改为:

activeTab: function (oldValue, newValue) { // function instead of =>
if (oldValue !== newValue) {
this.selected = [];
}
}

此外,当您使用全选框时,您的代码存在问题。

根据经验,所有顶级函数都应使用 function 声明。当嵌套函数需要访问 this

时,仅在函数本身内使用 =>

关于javascript - 在 VueJS 中使用观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61569432/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com