Vue+elementUi选择器远程搜索

Vue+elementUi选择器远程搜索
前端代码:
根据官方给的样例基本照着扒下来
官方地址https://element.eleme.cn/#/zh-CN/component/select
这是我的代码

<el-form-item label="项目负责人" prop="projectLeader">
<el-select v-model="form.projectLeader" filterable remote placeholder="请输入关键词" :remote-method="remoteMethod" >
    <el-option
      v-for="(item, index) in options"
      :key="index"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</el-form-item>

因为我是用from表单传的数据所以我的v-model=“form.projectName”。
官方给的这几个参数multiple ,filterable , remote ,reserve-keyword。你自己看你要用哪个。
之后按着官方给的文档

export default {
    data() {
      return {
        options: [],
        value: [],
        list: [],
        loading: false,
        states: []}
}

官方的文档里states是有赋值他是为了测试,我们的数据是要从数据库里查出来所以states[]里没有值。
接着官方给的文档

mounted() {
      this.list = this.states.map(item => {
        return { value: `value:${item}`, label: `label:${item}` };
      });
},

按照官方的文档写会有一点问题,在网上看到了一篇文章。
https://www.cnblogs.com/pingguo-softwaretesting/p/14787965.html

computed: {
  listSet() {
    return this.states.map(item => {
      return {value: `${item.userName}`, label: `${item.userName}`};
    });
  },
},

用这段代码代替官方给的文档,这个方法的主要作用是把你传到前端的值写成map的形式,因为select选择器接受信息的格式是

{
  label: "value",
  value: "value",
},

这里的this.states就是你返回到前端的值。你要是不知道返回了什么就在浏览器按f12之后点击Network.找到你调用这个方法的地方就能看到了。
这里的item.userName是你返回到前端的对象数组里内容你想把什么赋给他什么值就在这里赋给label与value,label就是你要展示的标签的名称,value是你要存的值。
前端页面的最后一步

remoteMethod(query) {
  if (query !== '') {
    this.loading = true;
    treeselect().then(response => {
      this.states  = response.rows;
    });

    setTimeout(() => {
      this.loading = false;
      this.options = this.listSet.filter(item => {
        return item.label.toLowerCase()
          .indexOf(query.toLowerCase()) > -1;
      });
    }, 200);
  } else {
    this.options = [];
  }
},

remoteMethod就是你的这个方法名,treeselect()就是你给后端的接口它的返回值就是你查到的内容。之后把返回值赋给states。
我的API是分开写的,在前端别忘了在import里导入

Js

export function treeselect() {
  return request({
    url: '/report/upstreaminfo/treeselect',
    method: 'get'
  })
}

url就是你给后端的接口
这样前端基本上就完成了。
前端的基本思想就是,从后端拿到了想要显示在下拉列表的值,把值赋给states[],之后在通过listset方法改变states的格式。
后端代码
在controller里写

@PreAuthorize("@ss.hasPermi('report:upstreaminfo:query')")
@GetMapping(value = "/treeselect")
public TableDataInfo treeselect(User user)
{
    List<User> users = tUpstreamInfoService.selectUserList(user);
    return getDataTable(users);

}

User就是你接收的实体
Service

public List<User> selectUserList(User user);

impl

public List<User> selectUserList(User user) {
    return tUpstreamInfoMapper.selectUserList(user);
}

mapper

public List<User> selectUserList(User user);

xml

<select id="selectUserList" parameterType="User" resultMap="UserResult">
    select user_name from sys_user
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值