如何选择过滤器并使用选定的值在 vue 应用程序中进行搜索?

Posted

技术标签:

【中文标题】如何选择过滤器并使用选定的值在 vue 应用程序中进行搜索?【英文标题】:How to select filters and use the selected value to search in vue application? 【发布时间】:2021-09-21 21:51:06 【问题描述】:

我有一个 Vue JS 应用程序,用户在其中选择或输入过滤器并根据这些过滤器搜索数据库。目前我有一个“to”和一个“from”部分,其中的值用于获取 url 以从 json-server 获取数据。一旦用户选择了“to”和/或“from”,他们可以点击一个按钮,应用过滤器并从 json-server 获取消息。

以下是相关代码:

    <template>
    <v-app>
     <v-autocomplete dense
          filled
          label="From: "
          v-model="selectedFrom"
          :items="msgFromID"
          item-text='MsgFrom'
          item-value='MsgFrom'>
    </v-autocomplete>
    <v-autocomplete dense
          filled
          label="To: "
          v-model="selectedTo"
          :items="msgToID"
          item-text='MsgTo'
          item-value='MsgTo'>
    </v-autocomplete>

    <v-btn @click="fetchData()">Apply Filters</v-btn>
   </v-app>
   </template>

   <script>
export default 
    name: 'Inbox',
    data() 
        return 
            msgFromID: [],
            msgToID: []
   
 ,  
 mounted() 
        fetch('SAMPLEURL/messages?MsgFrom=')
            .then(res => res.json())
            .then(data => this.msgFromID = data)
            .catch(err => console.log(err.message)),
            fetch('SAMPLEURL/messages?MsgTo=')
                .then(res => res.json())
                .then(data => this.msgToID = data)
                .catch(err => console.log(err.message)),
 ,
methods: 
        fetchData(selectedTo, selectedFrom) 
            fetch('SAMPLEURL/messages?MsgFrom=' + selectedFrom + '&MsgTo=' + selectedTo)
                .then(
                    function (response) 
                        if (response.status !== 200) 
                            console.log('Looks like there was a problem. Status Code: ' +
                                response.status);
                            return;
                        
       

每当我单击“应用过滤器”按钮时,选择的值都不会保存,我最终会在日志中看到这个 url:

    SAMPLEURL/messages?MsgFrom=undefined&MsgTo=undefined

如何使值不再显示为未定义,而是检索我可以在页面上显示的消息列表?另外,如果没有用户选择的值,是否可以完全忽略其中一个搜索条件(MsgFrom 或 MsgTo)?

【问题讨论】:

【参考方案1】:

您的click-binding 不传递任何参数:

<v-btn @click="fetchData()">

但该方法需要它们:

export default 
  methods: 
    fetchData(selectedTo, selectedFrom) /*...*/
  

由于没有向该方法传递任何参数,selectedToselectedFrom 的值是 undefined,导致您观察到的错误。

解决方案

您可以更新绑定以传递所需的参数:

<v-btn @click="fetchData(selectedTo, selectedFrom)">

或者您可以更新方法以使用组件的数据道具:

export default 
  methods: 
    fetchData() 
      const  selectedTo, selectedFrom  = this
      fetch('SAMPLEURL/messages?MsgFrom=' + selectedFrom + '&MsgTo=' + selectedTo)
      //...
    
  

【讨论】:

以上是关于如何选择过滤器并使用选定的值在 vue 应用程序中进行搜索?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用核心ui模板在vue js中获取选定的值

如何手动更改 UIMenu 中选定的 UIAction?

如何在暴露过滤器中更改另一个选择列表时更改选择列表的值

剑道下拉选项标签更改选定值

ASP 菜单:如何避免回发并使用 Javascript 客户端脚本访问选定的值

如何使用angularJS从自定义下拉列表中获取选定的值