vue.js - 如何“锁定”Vuetify v-list-item-group 选择?
问题描述
我有一个v-list-item-group
有状态的列表项。问题是一旦选择了任何一个,我想禁用更改当前选定的项目。
为此,我尝试watch
在所选项目上添加 a 并恢复它v-model
的旧值。然而,它最终进入了一个无限循环(你知道,我在它自己的观察者中分配了新值)。
<template>
<v-list>
<v-list-item-group v-model="model" :mandatory="!!model">
<v-list-item v-for="(item, i) in items" :key="`item-${i}`" :value="item">
<v-list-item-content>
<v-list-item-title v-text="item"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</template>
<script>
export default {
data: () => ({
items: [
'item1',
'item2',
'item3'
],
model: null,
}),
watch: {
model (val, oldVal) {
// This logic will change the value and trigger watcher again and again
this.val = oldVal
}
}
</script>
那么,如何锁定一个`v-list-item-group的选择?- 显然上面的片段不是正确的方法。
解决方案
在您的方法中添加一个属性
data()
,例如lockSelection
. 将其初始化为false
.为您的 v-list-items添加一个
v-bind:disabled="lockSelection"
属性。@click="lockSelection = true"
为您的 v-list-items添加一个监听器。
<template>
<v-list>
<v-list-item-group v-model="model" :mandatory="!!model">
<v-list-item v-for="(item, i) in items" :key="`item-${i}`" :value="item"
:disabled="lockSelection" @click="lockSelection=true">
<v-list-item-content>
<v-list-item-title v-text="item"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</template>
<script>
export default {
data: () => ({
items: [
'item1',
'item2',
'item3'
],
model: null,
lockSelection: false
}),
watch: {
model (val, oldVal) {
// This logic will change the value and trigger watcher again and again
this.val = oldVal
}
}
</script>
推荐阅读
- java - 在 Java 中使用递归查找最大 Int
- javascript - 如何访问在子地图(嵌套地图)中映射的父元素
- go - 选择频道时遇到死锁
- javascript - 如何使用路由器从一个组件访问传递的数据到另一个 ReactJS
- node.js - 如何使用firebase函数返回保存在firebase存储中的文件的json内容
- git - git fetch:如何查看每个分支的下载数据
- r - 过滤在 r 中事件“A”的时间范围内发生的事件
- javascript - 有没有办法在输入之前修改搜索菜单以隐藏菜单?
- laravel - 在 Laravel 中,我应该将模型的实用程序放在哪里?
- javascript - 有没有办法发出 API 请求,并且在发出请求之前只获取满足特定条件的数据?