我们有一个名为FilterPanel的Vutify 3组件;简化版本如下:

<template>
  <div>
    <v-container>
      <v-row>
        <v-col cols="3">
          <v-select v-model="field" :items="fields" :menu-props="{ auto: true }">
            <v-field />
          </v-select>
        </v-col>
        <v-col>
          <v-text-field v-model="text" :type="(formats && formats[field]) || 'text'" @keyup.enter="add" />
        </v-col>
        <v-col cols="2">
          <v-btn @click="add()">
            Add Filter
            <v-icon end theme="dark"> mdi-filter-plus </v-icon>
          </v-btn>
        </v-col>
      </v-row>
    </v-container>
    <v-chip>
      ... removed for brevity
    </v-chip>
  </div>
</template>

Vutify 2版本与此类似:

<template>
  <div>
    <v-text-field v-model="text" :type="(formats && formats[field]) || 'text'" @keyup.enter="add">
      <v-select slot="prepend-inner" v-model="field" :items="fields" menu-props="auto" />
      <v-btn slot="append" @click="add()" >
        Add Filter
        <v-icon right dark>mdi-filter-plus</v-icon>
      </v-btn>
    </v-text-field>
    <v-chip>
      ... removed for brevity
    </v-chip>
  </div>
</template>

在后面的文件中(在<scripts>中),在导出对象的各个methods中有以下几行:

this.$emit('input', { ...this.value, ...qFields })

this.$emit('input', { ...this.value, [this.field]: this.text })

this.$emit('input', omit(this.value, key))

在Vutify 2版本中,this.value似乎基本上相当于{ [this.field]: this.text }(除了w/getters和setters).我不确定这是因为重新组织的代码还是因为Vutify的变化,但现在this.value似乎还没有定义.

这些排放物到底要达到什么目的?我在我们的代码库中没有看到任何@input,我查看了Vutify树中的各种组件,也没有明确提到input事件.

归根结底,我想弄清楚的是我是否应该:

  1. 只需删除emits 物即可
  2. 做一些时髦的事情来重建this.value(例如 this.$emit('input', { ...{ [this.field]: this.text }, ...qFields }))
  3. 根据Vutify 3中没有的一些更改来更改这些内容 移民指南?我确实注意到了这一点:@input event has been replaced by @update:model-value on components that support v-model usage.,但我不确定如果这是相关的,具体需要做什么-更改第一个emit参数,但然后第二个参数呢?

谢谢!

推荐答案

我的猜测是您没有看到任何@input个事件,因为该组件与v-model一起使用.

在Vue 2中,v-model是绑定到props :value和监听事件@input的缩写.在Vue 3中,这已被改变为设置props :modelValue并收听事件@update:modelValue.我认为这就是您需要更改的内容--将value重命名为modelValue,而不是发出input事件,而是发出update:modelValue.


为了添加一些细节,这看起来像是一个自定义组件,它允许从许多属性中进行 Select ,然后在this.value对象中设置相应的值.我认为它还允许将几个属性重写为预设值,并可能完全删除一个属性.

这是用户为所选域输入数据时的emits 值:

this.$emit('input', { ...this.value, [this.field]: this.text })

它创建一个新对象,其中包含输入props :value中的所有内容,但this.field中给出的props 更改为this.text中的值.

这是覆盖多个属性时的emits :

this.$emit('input', { ...this.value, ...qFields })

它会创建一个包含输入props :value中的所有内容的新对象,但qFields中的所有关键点都会添加到输出中,覆盖任何已存在的关键点.

最后,这将发出:value,但删除了一个属性:

this.$emit('input', omit(this.value, key))

我显然只是在猜测,如果不知道qFieldsomit()key是什么,以及组件是如何使用的,就不可能说出来.让我知道我离得有多近,更重要的是,如果这不起作用,请添加更多信息.

Vue.js相关问答推荐

为什么元素会从Vue 3中的TransitionGroup左上角出现?

如何只提取一次用于无线电组过滤的数据,而不是针对数据库中的每个条目提取数据?

Vue 3 需要 main.js 中的文件

有没有办法将react 键作为值传递给由 v-for 创建的 v-model

vue 不重新渲染数据更改

仅在构建时为 Vue3 和 TailwindCSS 添加前缀

Vue 脚本标签中更漂亮的 destruct 功能

为什么 vue 中的 @mouseover 操作不起作用

在 SASS 中使用 Vuetify 类

Django Rest 框架、CSRF 和 Vue.js

VueJS 禁用特定属性的react性

为什么 vue 文档说 refs 不是响应式的,而实际上它们是响应式的

将 Vuetify 从 1.5 升级到 2 时,Sass-loader 错误 'options has an unknown property 'indentedSyntax''

Vuejs模板继承

使用 nuxt,如何将路由名称放在页面标题中?

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

如何通过 Axios 发送文件到 Laravel

beforeCreate 挂钩中的 Vue 2.1 调用方法不起作用

偶数行格式化

VueJS 2 + ASP.NET MVC 5