如何使用 vue/vuex 从输入中过滤数据?

Posted

技术标签:

【中文标题】如何使用 vue/vuex 从输入中过滤数据?【英文标题】:How I filter data from an input using vue/vuex? 【发布时间】:2019-07-24 16:50:55 【问题描述】:

我想知道如何通过输入过滤来自计算属性的数据。

我的问题来自于属性计算 dataFiltered() ,其中返回了一个 getter,但它有一个字符串作为参数。

我希望在写单词时通过输入过滤信息。

Home.vue

  </template>
     <input type="text" :v-model="search" class="form-control" id="search" placeholder="Search..."/>
      <div>
        <ul v-for="item in dataFiltered" :key="item.id">
         <li>item</li>
       </ul>
     </div>
 </template>

  <script>
     import ACTYPE from '../store/types/actions_types';
     import mapState , mapGetters from 'vuex';

     export default 
        name: 'home',
        created()
        this.$store.dispatch(ACTYPE.GET_MOVIES);
     ,
    data()
      return
        search: ''
      
    ,
    computed: 
      ...mapState(['topMovies' , 'loading']),
      ...mapGetters(['filterData']),

      dataFiltered()
        // parameter harcored
        return this.filterData("Sp")
      
    ,
   
  </script>

store/getters.js

export const getters = 
  TopMovies: (state) =>
    return state.topMovies.map(data =>
      return data
  );
 ,

filterData: (state) => (search) =>
  let query = new RegExp(search , 'i');
  console.log(query);
  //return state.topMovies.filter(data => data.name === query);    
  return state.topMovies.filter(data =>      
    return data.name.toLowerCase().includes(search.toLowerCase())
  )
 ,
;

【问题讨论】:

【参考方案1】:

首先,您的:v-model="search" 应该只是v-model="search":v-model 正在将值绑定到某个东西。

其次,我没有看到您将组件中的 search 传递给 Vuex 存储,然后将其应用于 getter。


这没有经过测试,我认为您不需要商店就可以使用它。您可能需要存储最多的是使用mapGetters 帮助器获取初始数据,并在这种情况下假设topMovies

在您的计算属性中,您需要做的就是使用搜索查询字符串过滤数据。

例如

computed() 
  ...mapGetters(["topMovies"]),
  filteredData() 
    return this.topMovies.filter(movie => movie.name.toLowerCase().includes(this.search.toLowerCase()))
  

【讨论】:

嗨@Ru Chern Chong 出于某种原因,他在进行查询之前向我展示了所有数据。当我进行查询时,数据会被过滤。在将查询添加到搜索之前,有没有办法不显示任何数据? 这是可能的,这意味着您必须先将搜索查询存储在商店中,并在您的组件中调用它之前先在 getter 中直接对其进行过滤。

以上是关于如何使用 vue/vuex 从输入中过滤数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 3 s-s-r 应用程序的路由器中使用 vuex 商店?

如何绑定输入字段并同时更新 vuex 状态

如何在 natviescript-vue vuex 商店操作中使用 $navigateTo?

如何从 Vuex 商店中删除 Firestore 快照侦听器

Vue,vuex:如何使用命名空间存储和模拟对组件进行单元测试?

从模板访问 vue vuex 命名空间的 getter