Search a list while typing in textbox VueJS 2

后端 未结 6 1283
我寻月下人不归
我寻月下人不归 2021-02-04 15:00

I have a list of users from an array. And I want to filter them based on the search box(name) at the top. I saw that there are filters in VueJS 1. But not available in VuesJS 2.

6条回答
  •  温柔的废话
    2021-02-04 15:25

    Filters has been removed in vuejs 2. As suggested by @azamat-sharapov, you can have reusable filters using one of following 3 ways:

    How can I do it in 2.0?

    • Mixin
    • Separate module with method
    • Separate module with computed prop function

    A simple implementation of filter in vuejs 2 can be using a computed property which can call a method to get filtered list. in the method you can pass list, query and it can return the filtered list. see following code and working demo here. Following are generic functions, which can be moved to mixin or module and can be re-used in multple components.

    var vm = new Vue({
      el: '#demo',
      data: {
        customers: [
              { id: '1', name: 'user 1', profile_pic: 'https://i.stack.imgur.com/CE5lz.png', email:'ab@gmail.com', phone:'+91959657248', unread:'0' },
              { id: '2', name: 'user 2', profile_pic: 'https://i.stack.imgur.com/CE5lz.png', email:'abcd@gmail.com', phone:'+919456664023', unread:'0' },
              { id: '3', name: 'user 3', profile_pic: 'https://i.stack.imgur.com/CE5lz.png', email:'test@gmail.com', phone:'+919566565065', unread:'0' },
              { id: '4', name: 'user 4', profile_pic: 'https://i.stack.imgur.com/CE5lz.png', email:'sample@gmail.com', phone:'+916466004566', unread:'0' }
            ],
        columns: {
          id : {
            displayname : "id",
            sortorder : 1
          },
          name : {
            displayname : "name",
            sortorder : 1
          },
          email : {
            displayname : "email",
            sortorder : 1
          }
        },
        query: '',
       },
      computed: {
        tableFilter: function () {
            return this.findBy(this.customers, this.query, 'name')
        }
      },
      methods: {
        findBy: function (list, value, column) {
          return list.filter(function (item) {
            return item[column].includes(value)
          })
        }
      }
    })
    

提交回复
热议问题