【测试开发】vue — elementUI select选择器 远程搜索实现

先提下背景:就是在测试的过程中,经常需要用到收货这个功能。在PC端下了采购单,再到APP去对应功能里,再输入好多个字段,上传图片等动作后,终于可以提交。
于是,我决定在平台上加个小工具,快捷收货,方便测试用。

那么,在收货操作中,要有收货人这个角色。为了更好的适用性,我决定做成一个搜索框,支持实时搜索人员。于是,从elementUI上找到了select选择器 远程搜索。

这里提一下,前端菜鸟怎么去用elementUI上的这些组件:

  1. 操作官方示例,感受组件的实际效果,确实是否满足你需求。
  2. 展开示例代码,关注使用的字段、方法等。
  3. copy示例代码,用你实际的数据、字段等去替换掉它,直到调试成功。
<template>
  <el-select
    v-model="value"
    multiple
    filterable
    remote
    reserve-keyword
    placeholder="请输入关键词"
    :remote-method="remoteMethod"
    :loading="loading">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
  </el-select>
</template>

<script>
  export default {
    data() {
      return {
        options: [],
        value: [],
        list: [],
        loading: false,
        states: ["Alabama", "Alaska", "Arizona",
        "Arkansas", "California", "Colorado",
        "Connecticut", "Delaware", "Florida",
        "Georgia", "Hawaii", "Idaho", "Illinois",
        "Indiana", "Iowa", "Kansas", "Kentucky",
        "Louisiana", "Maine", "Maryland",
        "Massachusetts", "Michigan", "Minnesota",
        "Mississippi", "Missouri", "Montana",
        "Nebraska", "Nevada", "New Hampshire",
        "New Jersey", "New Mexico", "New York",
        "North Carolina", "North Dakota", "Ohio",
        "Oklahoma", "Oregon", "Pennsylvania",
        "Rhode Island", "South Carolina",
        "South Dakota", "Tennessee", "Texas",
        "Utah", "Vermont", "Virginia",
        "Washington", "West Virginia", "Wisconsin",
        "Wyoming"]
      }
    },
    mounted() {
      this.list = this.states.map(item => {
        return { value: `value:${item}`, label: `label:${item}` };
      });
    },
    methods: {
      remoteMethod(query) {
        if (query !== '') {
          this.loading = true;
          setTimeout(() => {
            this.loading = false;
            this.options = this.list.filter(item => {
              return item.label.toLowerCase()
                .indexOf(query.toLowerCase()) > -1;
            });
          }, 200);
        } else {
          this.options = [];
        }
      }
    }
  }
</script>

从示例代码里,可以看出:

  • states应该存放我后端接口返回的数据,示例里states是列表,我接口返回的也是列表,不过里面元素都是对象,每个对象里存着不同人的信息。
  • mounted()方法里面,是在渲染完成后,将states里的列表数据,进一步处理成一个对象,用map()返回一个新的列表,并且赋值给this.list
  • 最终在remoteMethod(query)方法里,根据输入的传参query,对this.list里的数据进行过滤,返回出匹配的数据,赋值到this.options,这样下拉列表就可以展示结果。
    这里的.indexOf(query.toLowerCase()) > -1,大于-1说明只要有就行,不论是不是开头也好,中间也好,或者结尾也好。比如搜“大周”,你输入“大”或者“周”,都可以搜到。

赶紧参考官方示例,满心欢喜地开始修改代码:

// mounted()内容

        mounted() {
            this.list = this.states.map(item => {
                return { value: `${item.id}`, label: `${item.role_name}-${item.ad_real_name}` };
            });
        },
// method()里内容

            remoteMethod(query) {
                if (query !== '') {
                    this.loading = true;
                    this.$axios.post("/api/receiveGoodsQuickly/getWmsAdminInfo", {
                        "ad_real_name": query,
                        "mchid": 6001
                    }).then((response) => {
                        this.states = response.data['content'];
                    });

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

可是实际执行效果是这样的:
我输入第一次“张三”,没结果。当我再输入一次“张三”,返回出了对应的结果。
我继续输入“李四”,仍然没结果,再输入一次“李四”,结果出来了......

后来发现,还是不能直接套用官方示例的,因为示例代码是直接初始化了数据在states里,而我实际是要去请求后端接口才能拿到数据。如此一来,当我第一次调用到remoteMethod
方法,实际上this.list是null。当我第二次调用的时候,其实出现的是上一次的查询结果。

最终,找到了解决办法,就是在computed增加处理步骤,computed起到侦听的作用,这样可以立即得到处理好的数据。

computed: {
            listSet() {
                return this.states.map(item => {
                    return { value: `${item.id}`, label: `${item.role_name}-${item.ad_real_name}` };
                });
            }
        },
setTimeout(() => {
                        this.loading = false;
                        this.options = this.listSet.filter(item => { // 这里的this.list,换为this.listSet
                            return item.label.toLowerCase()
                                .indexOf(query.toLowerCase()) > -1;
                        });
                    }, 1000);

调试通过,搜索结果实时展示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Updates: 1)增加防止COOKIE欺骗攻击的加密KEY属性设置,编辑器用到的COOKIE都将会进行加密。 2)更新编辑器帮助文件。 3)文字水印调整为只添加到图像宽高>100像素的图片上面,并且调整编辑器默认配置添加的是图片水印! 2010/04/02 Version 6.1.6 For VS2005/2008 Updates: 1)针对IIS6.0文件解析高危漏洞进行修正。 2)上传功能的一些优化。 3)文件夹重命名的一些改进。 2010/03/08 Version 6.1.5 For VS2005/2008 Updates: 1)修正了一个安全方面的BUG。 2)修正保存远程图片到本地功能的保存路径问题。 3)修正保存远和图片到本地功能在IE6及IE7的提交BUG。 4)修正上传图片界面中对齐方式不能生效的BUG! 2010/01/15 Version 6.1.4 For VS2005/2008 Updates: 1)加入保存远程图片到本地的功能图标到菜单栏,配置代码为remoteupload。 2)修正FireFox下插入WMA等音频文件不能播放的BUG. 3)修正关闭图像预览后可能出现的BUG. 4)修正保存图片到本地的一些BUG. 5)更新配置器,增加保存远程图片到本地功能的配置. 2009/12/10 Version 6.1.3 For VS2005/2008 Updates: 1)修正了firefox浏览器下编辑器宽度设置为100%会出错的BUG。 2)优化了图片水印功能,图片水印可以4:1为比例自适应图片。 3)增加水印调整功能的左上,左下,右上,右下角的位置(默认右下)。 4)增加图片水印是否半透明的选项。 2009/11/25 Version 6.1.2 For VS2005/2008 Updates: 1)修正插入视频的地址是mms、rtsp的话,路径就不对的BUG。 2)优化了上传成功后的处理代码。 3)改进了插入表情图标的功能(增加了多组表情,并且鼠标经过表情后可自动放大表情)。 4)优化了编辑器的整体结构。 2009/09/30 Version 6.1.1 For VS2005/2008 Updates: 1)修正上传管理中删除文件夹及重命名文件夹导致Session失效的BUG。 2)改善了新建文件夹的方式,按取消按键后文件夹将不会被新建。 3)重新用回Cookie方式储存参数,并且加强COOKIE的安全性。(因为session在操作删除目录后会掉失) 2009/08/07 Version 6.1.0 For VS2005/2008 Updates: 1)改用Session代替部分Cookie储存上传功能所用到的配置数据,以便让编辑器上传更加安全。 2)修正一个文件格式上传时存在的安全性问题。 3)上传页面去掉所有input隐藏属性储存参数,改用ViewState储存,并加入ViewState的防改措施。 2009/07/05 Version 6.0.9 For VS2005/2008 Updates: 1)修正插入表格后在表格单元格插入内容会插到另一个单元格的BUG。 2)控件可视化配置工具中的功能显示中插入excel表格改为导入Excel表格。 2009/06/23 Version 6.0.8 For VS2005/2008 Updates: 1)去掉现在基本没法使用的插入EXCEL表格功能,改为无组件的导入EXCEL文档功能(测试中,导入excel文档必须符合数据库格式,否则导入数据将不全)。 2)更新编辑器的部分文字资源。 3)修正4号与5号字体大小一样的BUG! 2009/06/15 Version 6.0.7 For VS2005/2008 Updates: 1)修正word导入功能中如果选择了保存word文档到服务器,那么下次相同的文件将不能再次导入的BUG! 2009/06/02 Version 6.0.6 For VS2005/2008 Updates: 1)修正了6.0.5版本增加功能后出现上传后出错的严重BUG。 2009/05/23 Version 6.0.5 For VS2005/2008 Updates: 1)修正了上传远程图片文件时可能出现404的错误。 2)修正插入部分远程URL图片时可能出现无法显示的错误。 3)修正FireFox浏览器下弹出窗口自适应大小功能不正常的BUG。 4)改进了多文件上传后自动选择添加到上传列表的文件。 5)改进了如找不到对应语言文件则使用默认语言的功能。 2009/05/15 Version 6.0.4 For VS2005/2008 Updates:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值