使用 Vue.js 过滤列表

新手上路,请多包涵

我刚开始使用 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"

但是同样,这在页面加载时不起作用,因为性别为空。我找不到解决方法。

我应该如何处理这个问题?

原文由 Graham Slick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 506
2 个回答

使用计算属性 - 像这样(示例波纹管按类型过滤项目)

 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

原文由 Belmin Bedak 发布,翻译遵循 CC BY-SA 4.0 许可协议

刚刚修改 了@Nora 的答案。

您需要在模板中更改为:

  <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

原文由 Gufran Hasan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏