DEV Community

loading...
Cover image for Multi Filter Column in Vuetify Data Table

Multi Filter Column in Vuetify Data Table

brunopanassi profile image Bruno Panassi ・3 min read

I know that there is a solution for this if you see the documentation for custom filter in data table, but i tried and for some reason it didn’t work. So i search for other solution and i find many other ways, but the only one that allowed multi filter column independent of the filtering order, was the one that i will show here.

So, i will take the common v-data-table used in the Vuetify documentation:
Vuetify Data Table

The first thing to do is use a slot for the header of the column name, that we will add a icon to activate a menu, that will have a v-text-field to filter the data and a button to clean the input.
Alt Text

And we will have this:
Alt Text

Now we gonna need a variable, that we will called it dessertName to filter the data. To this we add it to the property v-model of the v-text-field in the menu of the column template, and add a click event on the v-btn to clean the input data.
Alt Text

A method is needed to filter the data when dessertName is filled, so we call it filterDessertName, and pass a argument called item to access the property name of the desserts array.
Alt Text

But, to the method work and return the data filtered, we need to create a computed property and call it in the prop items of the v-data-table.

In the computed property filteredDesserts we create the array conditions, and check every time that the variable dessertName is filled, if so, we add the method filterDessertName to the conditions, and then, we return the desserts array filtering every condition that have in the conditions array:
Alt Text

And the v-data-table will be like this:
Alt Text

And the column name filtered will be like:
Alt Text

Ok, for now, he have a column that allow you to filter the data in it, but this is not a multi filtering, so we gonna do the same for the columns Calories and Fat, and add more data to the dessert array. The data will be Eclair Dark and Eclair Light with new values, to test the multi filtering in the right way.
Alt Text

The methods:
Alt Text

The computed property filteredDesserts:
Alt Text

And the v-data-table header templates for Calories and Fat. To have a better vision of which column is filtered, a small function is added in the color property of every v-icon:
Alt Text

And if we filter the column name with the text ec, the column calories with the value 2, and the column fat with the value 16, independent of the order that you put the values, we will see this row:
Alt Text

You can see the code and test the orders of the filter in this CodePen:
https://codepen.io/BrunoPanassi/pen/dyNQZQP

Shure, you can make better the computed property filteredDesserts by decreasing the if statements and joining the filter variables and filter methods in one Object, but the purpose of this article, is only to show another way to do the multi filtering in the data table, other than by the documentation.

So if you know a better way to do this or have something to say, fell free to comment!

Thanks for reading!

Discussion (0)

Forem Open with the Forem app