【问题标题】:vuetify: v-chip v-model using dynamic listsvuetify:使用动态列表的 v-chip v-model
【发布时间】:2018-01-02 07:42:47
【问题描述】:

我有一个 vuetify 组件来显示标签列表。

<template>
    <div>
        <v-chip 
            v-for="tag in tags" 
            :key="tag.id" 
            v-model="???"
            @input="onClose(tag)"
            close
        >
            {{tag.name}}
        </v-chip>
    </div>
</template>

<script>
    export default {
        name: 'TagIndex',
        props: ['tags'],

        methods: {
            onClose(tag){
                console.log('close tag')
            }
        }
    }    
</script>

vuetify 文档说:

可以使用 v-model 控制可闭合芯片。

如果标签列表是动态的,我不明白我需要为每个标签指定什么样的对象作为模型。

我尝试根据标签列表创建一个数组:

data(){
  return {
    clonedTags: this.tags.map((t) => {return true})
  }
}

但是失败了

【问题讨论】:

  • 看起来标签应该是一个数组,而 v-model 应该是 v-model="tag"。这对你有用吗?

标签: vuejs2 vue-component vuetify.js


【解决方案1】:

该组件中的v-model 绑定到标签的打开/关闭状态,所以它应该只是一个布尔值。 Here's an example fiddle.


在你的情况下,如果你给 tags 数组中的每个对象一个 isOpen 属性,那么你可以像这样使用它:

<v-chip 
  v-for="tag in tags" 
  :key="tag.id" 
  v-model="tag.isOpen"
  @input="onClose(tag)"
  close
>
  {{tag.name}}
</v-chip>

然后,每当tag.isOpen 的值发生变化时,该变化都会反映在组件的打开/关闭状态中,反之亦然。

Here's an example fiddle.

【讨论】:

  • 是的,谢谢,它几乎可以工作了。唯一不起作用的是隐藏标签。如果我按“关闭”,tag.isOpen 的值会变为 false,但标签本身不会消失
  • 已编辑以包含使用 tag.isOpen 的小提琴示例。检查您的代码与该代码有何不同
  • 是的,我们的代码是一样的。唯一的区别是我的标签不在数据中,而是在道具中
  • 是的,我发现了一个错误。问题是最初在标签中没有 isOpen 属性,我在将列表传递给子组件时添加了它&lt;tags-view :tags="note.tags.map((t) =&gt; {t.isOpen = true; return t})" &gt;&lt;/tags-view&gt;
  • 正是我想要的。谢谢@thanksd
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2021-03-04
  • 1970-01-01
  • 2021-05-02
  • 2018-12-14
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多