搜索框篩選是頁面交互設計中常見的功能之一,它可以將大量的數據快速、有效地篩選出來,提高用戶體驗,節約用戶閱讀時間。在Vue框架中,使用搜索框篩選數據可以很方便地實現。下面我們就來介紹一下如何使用Vue框架實現搜索框篩選。
首先,我們需要在Vue template中定義一個搜索框組件。可以使用input元素來實現,如下所示:
<input v-model="searchText" placeholder="請輸入要搜索的內容">
其中,v-model指令可以把searchText變量與輸入框的value屬性進行雙向綁定。輸入框內的內容改變時,searchText變量的值也會隨之改變,從而實現動態搜索頁目的。
然后,我們需要在Vue實例中定義數據對象,存放待搜索的數據列表。一般情況下,這些數據都是從后端接口中獲取的,可以使用Vue的mounted鉤子函數來獲取數據,并初始化searchText變量,如下所示:
var vm = new Vue({ el: '#app', data: { list: [], // 數據列表 filteredList: [], // 篩選后的數據列表 searchText: '' // 搜索框輸入內容 }, mounted: function () { var self = this; axios.get('/api/data/list').then(function (res) { self.list = res.data.list; self.filteredList = res.data.list; }).catch(function (err) { console.log(err); }) }, })
在上面的代碼中,我們使用axios庫來獲取數據,并將獲取到的數據賦值給list和filteredList,同時也將輸入框內的內容初始化為空字符串。
接下來,我們需要在Vue中監聽搜索框的結果,并根據結果來篩選數據。可以在計算屬性中進行如下操作:
computed: { filteredList: function () { var self = this; return self.list.filter(function (item) { return item.name.indexOf(self.searchText) !== -1; }) } },
在上面的代碼中,我們使用filter函數來過濾list數組中不符合要求的數據,其中self.searchText是輸入框內的值,item.name是list中每一個對象的名字屬性,indexOf函數可以用來判斷輸入框內的值是否包含在list中的每一個對象的名字屬性中。
最后,我們還需要在Vue template中將篩選后的數據列表渲染出來:
<ul> <li v-for="item in filteredList">{{ item.name }}</li> </ul>
在這里,我們使用了Vue的v-for指令來通過循環渲染出篩選后的數據列表。
到這里,一個簡單的Vue搜索框篩選就完成了。當然,實際應用中的搜索功能有時需要更復雜的實現方式,例如防抖、分頁等。但本文中介紹的這種方式已經可以滿足大部分需求了。