javascript 使用Vue.js过滤列表

ztmd8pv5  于 2023-02-11  发布在  Java
关注(0)|答案(5)|浏览(181)

我刚刚开始使用Vue.js,下面是我正在做的:我正在呈现一个产品列表,每个产品都有一个name,一个gender和一个size。我希望用户能够通过输入性别来过滤产品。

var vm = new Vue({
      el: '#product_index',
      data: {
        gender: "",
        products: [{name: "jean1", gender: "women", size: "S"}, {name: "jean2", gender: "men", size: "S"}]
      },
      methods:{
        updateGender: function(event){
          this.gender = $(event.target).val()
        }
      }
    }
  )

  <div v-for="product in products" v-if="...">
    <p>{{product.name}}<p>
  </div>
  <input v-on:change="updateGender">

我设法更新了性别,但是过滤部分有问题。当页面加载时,我不想进行任何过滤。在文档中,他们建议使用v-if,但它似乎与此配置不兼容。
如果我使用v-if,我可以:

v-if="product.gender == gender"

但同样的,这在页面加载时不起作用,因为性别是空的。我找不到解决这个问题的方法。
我应该如何处理这个问题?

ix0qys7i

ix0qys7i1#

使用计算属性-类似于以下内容(以下示例按类型过滤项目)

const app = new Vue({

  el: '#app',

  data: {
     search: '',
     items: [
       {name: 'Stackoverflow', type: 'development'},
       {name: 'Game of Thrones', type: 'serie'},
       {name: 'Jon Snow', type: 'actor'}
     ]
  },

  computed: {
    filteredItems() {
      return this.items.filter(item => {
         return item.type.toLowerCase().indexOf(this.search.toLowerCase()) > -1
      })
    }
  }

})

模板:

<div id="app">

    <div v-for="item in filteredItems" >
      <p>{{item.name}}</p>
    </div>

    <input type="text" v-model="search">

  </div>

演示:http://jsbin.com/dezokiwowu/edit?html,js,console,output

ax6ht2ek

ax6ht2ek2#

你可以试试v-if="!gender || product.gender == gender"

6yoyoihd

6yoyoihd3#

刚刚修改了**@诺拉**的答案。
您需要在模板中更改为:

<div id="product_index">
    <div v-for="product in products" v-if="!gender || product.gender===gender">
      <p>{{product.name}}<p>
    </div>
    <input v-on:change="updateGender">
  </div>

在JS文件中为:

var vm = new Vue({
      el: '#product_index',
      data: {
        gender: "",
        products: [{name: "jean1", gender: "women", size: "S"}, {name: "jean2", gender: "men", size: "S"}]
      },
      methods:{
        updateGender: function(event){
          this.gender = event.target.value
        }
      }
    }
  );

工作演示:https://jsbin.com/qocuraquki/edit?html,js,console,output

nuypyhwy

nuypyhwy4#

computed: {
        filteredItems() {
          return this.allStartupData.filter(item => {
            let byName =
              item.name.toLowerCase().indexOf(this.search.toLowerCase()) > -1;
            let byDescription =
              item.description.toLowerCase().indexOf(this.search.toLowerCase()) >
              -1;
            if (byName === true) {
              return byName;
            } else if (byDescription === true) {
              return byDescription;
            }
          });
        }
      }

然后你可以遍历filteredItems,比如

<v-flex v-for="(obj,index) in filteredItems" :key="index" xs12 md4>
ebdffaop

ebdffaop5#

computed: {
 filteredItems() {
  return myObject.filter((val) => { 
   return val.some((val) => val.toString().toLowerCase().includes(this.searchString))
  })
}}

按照上面的描述迭代对象

相关问题