将某个值动态传递给 Vue.js 中的计算函数

Posted

技术标签:

【中文标题】将某个值动态传递给 Vue.js 中的计算函数【英文标题】:pass certain value dynamically to computed function in Vue.js 【发布时间】:2021-08-16 11:06:09 【问题描述】:

我试图通过 v-model 传递一个 id,这样我就可以将它传递给我的计算函数。我的函数的目的是动态过滤表而不对函数中的名称进行硬编码。该函数必须能够过滤两个选择框。

我的数据称为guides,它有一个title/active/language_id/group

这是我的 html 下拉列表:

    <select v-model="filterResult" :id="language.id" class="select2-selection custom-select">
          <option value="">All</option>
          <option v-for="language in languages" v-bind:key="language.id" v-bind:value="language.id"> language.name </option>
    </select>

    <select v-model="filterResult" :id="active" class="select2-selection custom-select">
       <option value="">All</option>
       <option :value=1>Active</option>
       <option :value=2>Archived</option>
    </select>

这是我现在的计算函数,但您可以看到 "language.id" 是硬编码的,但我希望函数从 &lt;select&gt; 中读取它强>。我尝试将其放入 :id="" 但我不知道将其转发到 v-model 之外的功能。 这一切的目的就是如此我可以重用该组件而无需更改任何内容。所以它必须应用于两个选择框,甚至将来更多。

    filterCertainValue: function (evt) 
        if (!this.filterResult) return this.guides;
        return this.guides.filter(guide => 
            if (guide.language.id == this.filterResult) 
                return guide.language.id;
            
        )
    ,

【问题讨论】:

我没有任何错误或问题。问题是我没有经验,不知道如何得到我想要的。正如您的演示所示,您现在有一个用于语言的选择框,假设我在该选择框下方有另一个选择框用于“活动”而不是“语言 ID”。我想要的是我可以使用 vue 函数来应用它们,但现在不可能,因为你可以看到函数说返回 language.id。但我希望在触摸选择框时返回改变。 @tony19 codesandbox.io/s/… 【参考方案1】:

您可以创建一个动态过滤键,该键会根据上次选择的&lt;select&gt; 发生变化:

    创建一个data property(命名为"filterKey"):

    export default 
      data() 
        return 
          filterKey: null
        
      
    
    

    change-event handler 添加到每个&lt;select&gt; 以将filterKey 设置为在计算的prop 的过滤中使用的所需键(例如,language_idactive):

    <select @change="filterKey = 'language_id'">
      <!-- language_id options -->
    </select>
    
    <select @change="filterKey = 'active'">
      <!-- active options -->
    </select>
    

    更新计算道具的过滤器以使用filterKey

    computed: 
      filterCertainValue() 
        if (!this.filterResult) return this.guides
                                                    ?
        return this.guides.filter(guide => guide[this.filterKey] === this.filterResult)
      
    ,
    

demo

【讨论】:

以上是关于将某个值动态传递给 Vue.js 中的计算函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将初始表单值传递给 Vue.js 中的子组件?

如何将相同的事件侦听器分配给 Vue.js 中动态创建的按钮并将对象的值作为参数传递给它?

Vue 对象中的计算值函数被触发

VueJs:如何使用 $emit(optionalPayload) 和 $on 将“计算函数”值从子组件传递给父组件?

我可以在 Vue.Js 的计算属性中传递参数吗

我无法将我的 v-model 数据传递到我的后端以获取 vue.js 中的单选按钮类型,如何将选中的单选按钮值传递给我的后端?