【每天学一点-05】在Vue中使用Vant组件-picker选择器,并给选择器添加搜索功能

时间:2025-04-03 09:15:57
  • <template>
  • <van-picker
  • title="标题"
  • :columns="searchColumns" //数据列表
  • >
  • <template #title>//#title 显示在picker-title位置
  • <van-field
  • v-model="searchKey"//双向绑定数据
  • placeholder="请输入搜索内容"
  • clearable
  • />
  • </template>
  • </van-picker>
  • </template>
  • <script>
  • import { Picker, Field } from 'vant'//引用Vant组件
  • export default {
  • name: 'demo',
  • data() {
  • return {
  • columns: [],   //组件使用数据列表,初始化后不改变
  • searchColumns: [],//搜索筛选后的数据列表,随着查询内容改变
  • }
  • },
  • mounted() { //初始化数据
  • this.getList();//加载页面获取数据
  • },
  • methods: {
  • /* 获取数据列表方法 */
  • async getList() {
  • try{
  • const { res } = await = getList(); //请求封装接口
  • const { code, msg, data } = res;//接口返回数据
  • if( code === 200){
  • this.columns = data;//存入数据
  • this.searchColumns = data;//给查询数组初始化数据
  • }
  • } catch( e ) { throw new Error( msg ) }
  • }
  • },
  • watch: { //实时监听搜索输入内容
  • searchKey: function () {
  • let key = String( this.searchKey );
  • key = key.replace( /\s*/g, "" );//去除搜索内容中的空格
  • const reg = new RegExp( key, "ig" ); //匹配规则-i:忽略大小写,g:全局匹配
  • /* 进行筛选,将筛选后的数据放入新的数组中,‘name’键可根据需要搜索的key进行调整 */
  • this.searchColumns = this.columns.filter( item => item.name.match( reg ) !=null );
  • }
  • }
  • }
  • </script>
  • <style lang="less" scoped>
  • </style>