VueJS计算过滤器功能不起作用

Posted

技术标签:

【中文标题】VueJS计算过滤器功能不起作用【英文标题】:VueJS computed filter function not working 【发布时间】:2020-10-21 00:20:39 【问题描述】:

所以我正在尝试实现这里解释的功能Vuejs Search filter 但是计算中的函数似乎不起作用,甚至没有记录任何内容,这是我的代码:

...
<a-layout-header style="background: #fff; padding: 0">
    <a-input-search 
      placeholder="Search everything" 
      style="width: 200px; marginLeft: 20px" 
      v-model="searchData"
    />
    <a-button type="primary" style="marginLeft: 20px">
      + New
    </a-button>
</a-layout-header>
...
data() 
  return 
    data: json,
    collapsed: false,
    item_key: 1,
    searchData: ''
  ;
,
computed: 
  searchResult() 
    if (this.searchData) 
      return this.data.filter((item) => 
        return this.searchData.toLowerCase().split(' ').every(v => 
                  item.title.toLowerCase().includes(v));
        )
     else 
      return this.data;
    
  
,

编辑:过滤它的数据作为道具传递给子组件,我有一个 ant-design 表来获取它:

<a-table
  v-if="this.item.toString() === '1'"
  :columns="columns"
  :row-key="record => record.guid"
  :data-source="normalData"
  :pagination="pagination"
  :row-selection="rowSelection"
>
</a-table>

【问题讨论】:

首先,为简洁起见,您是否在“json”语句中省略了“数据”?你真的在某个地方调用你的计算吗? 不,我的数据实际上是从文件 data.json 导入的 json 我对 Vue 还是很陌生,我需要在 vue 文件中的某处调用 computed 吗? 我只是想知道您是如何调试计算值的。从我的角度来看,它看起来不错。只需在模板中的某处添加 searchResult 即可查看计算的值是多少!或者你可以使用 chrome "vuejs devtools" 扩展来调试你的 Vuejs 应用 另外,您可以尝试使用虚拟“数据”对象(不是来自 json 文件,只需在组件中自己创建对象)来检查您是否真的有数据。 【参考方案1】:

这就是你应该如何实现搜索过滤器:

...
<div>
    <input
      placeholder="Search everything" 
      v-model="searchData"
    >
    <div v-for="(item,index) in filteredList" :key="index">
       item.title 
    </div>
</div>
...
data() 
  return 
    data: [
  
    id: 1,
    title: 'First item',
  ,
  
    id: 2,
    title: 'Second item',
  ,
  
    id: 3,
    title: 'Third item',
  ,
],
    searchData: ''
  ;
,
computed: 
  filteredList() 
    const filter = this.searchData.trim().toUpperCase();
    return filter ? this.data.filter(item =>
    
      return item.title.toUpperCase().indexOf(filter) !== -1;
    ) : this.data;
  
,

【讨论】:

所以这是我的错,我没有指定整个功能,我过滤它的数据实际上是作为道具传递给子组件的,我有一个 ant-design 表可以得到这个数据 您可以更改模板以使用 AntDesign 表 - 它不会以任何方式影响 javascript 代码。只需将filteredList 发送到餐桌即可。

以上是关于VueJS计算过滤器功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue js:Vuetify 服务器端数据表搜索过滤器不起作用

Vuejs 动态切换类在 Laravel Blade 模板中不起作用

为啥这个(Django)“过滤器”功能不起作用?

Fabric JS removeColor功能过滤器不起作用

过滤器功能不起作用并给出错误

VueJS数据()不起作用