vue el-select 实现邮件系统收件人效果

简介

开发邮箱项目时,需要实现类似qq邮箱收件人的效果,其中包含:可添加多个收件人,输入时匹配通讯录,输入框失去焦点时自动添加输入的内容等功能。

根据需求项目,使用element的el-select插件,该插件已包含多选,输入匹配功能,但默认功能输入数据后,只有按Enter键时,才会自动添加,不符合需求,所以,本文完善下相关功能。

vue版本:2.6.12

不是专业前端的,如果有些描述存在问题,自行理解哈

代码及解析

先贴下完整代码,该代码作为components使用的,示例:

<email-select :address-list="addressBookList" @changeValue="changeRecipientsTos" :email="recipientsTos" placeholder="请添加收件人"></email-select>

 参数解析

address-list        通讯录列表,格式:[{name: "昵称", email: "xxx@xx.xx"}]
@changeValue        同步输入框收件人列表信息的方法,注意哦,这个方法更新的list,不能是参数email的值哦
email                初始显示的收件人列表
placeholder          输入框输入提示

全部代码 

<template>
  <div style="width: 100%">
    <el-select @blur.native.capture="selectBlur" style="width: 100%" v-model="list"
               filterable
               multiple
               allow-create
               remote
               :remote-method="remoteMethod"
               default-first-option
               :placeholder="placeholder">
      <el-option
        v-for="item in options"
        :key="item.email"
        :label="isNotNull(item.name) ? item.name + '<' + item.email + '>' : item.email"
        :value="item.email">
      </el-option>
    </el-select>
  </div>
</template>
<script>
import {isNotNull} from "@/api/default";

export default {
  name: "email-select",
  props:{
    email: {
      type: Array,
    },
    placeholder: {
      type: String
    },
    addressList: {
      type: Array
    }
  },
  data(){
    return {
      list: [],
      options: [],
      addressBookList: [],
    }
  },
  watch: {
    "addressList": {
      handler(newvalue, oldValue){
        this.addressBookList = newvalue;
      }
    },
    "list": {
      handler(newvalue, oldValue){
        this.$emit("changeValue", newvalue);
      }
    },
  },
  created() {
    this.list = this.email;
    this.addressBookList = this.addressList;
  },
  methods: {
    remoteMethod(query) {
      if (query !== '') {
        setTimeout(() => {
          this.options = this.addressBookList.filter(item => {
            return item.email.toLowerCase()
              .indexOf(query.toLowerCase()) > -1;
          });
        }, 200);
      } else {
        this.options = [];
      }
    },
    selectBlur(e){
      let val = e.target.value;
      console.info("selectBlur:" + val);
      let that = this;
      let length = this.list.length;
      setTimeout(function (){
        let timeLength = that.list.length;
        if (length < timeLength){
          return;
        }
        if (isNotNull(val) && !that.list.includes(val)){
          that.list.push(val)
        }
      }, 200);
    }
  }

}
</script>

 方法:isNotNull,只是判断是否为空的方法而已。

/**
 ** 判断是否为空
 * @param val
 * @returns {boolean}
 */
export function isNotNull(val){
  if (val == undefined || val == "" || val == null){
    return false;
  } else {
    return true;
  }
}

相关问题解析:

 el-select触发失去焦点事件,需要使用@blur.native.capture触发,只有@blur不行,非搞前端的,其中的原因没去详细了解。

selectBlur方法中,使用了setTimeout,是因为匹配到通讯录中的地址时,如果点击通讯录的地址,依然会触发失去焦点的事件,而获取到的值是输入的地址,而不是点击的通讯录地址。

所以,等待0.2秒,判断下list的值是否增加:

如果点击通讯录中的地址,list会增加一条记录,点击其他地方,list值不会增加。

如果list的值增加了,就忽略掉输入框中的值,

如果list没有增加,就添加输入框中的值。

其他的,应该是vue比较基础的,或者element有文档的,就不过多解释了

经过测试,符合项目需求,感觉还行,就记录一下,顺便分享一下

 


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于SpringBoot+Vue的商务安全邮箱邮件收发是一个集成了前端和后端技术的邮箱收发邮件平台,主要用于商务邮件的接收和发送,保证商务信息的安全性和准确性。该系统的源码、部署说明和系统介绍已经打包成一个zip文件,方便用户使用。 该系统的前端部分采用了Vue框架进行开发,主要实现了用户界面和交互,包括登录、注册、邮件接收、邮件发送等功能。而后端部分则采用了SpringBoot框架,负责处理用户请求、管理用户数据并提供相应的API接口。 该系统可以方便地接收和发送商务邮件,支持邮件的加密、签名、附件等功能,确保商务信息的安全性和准确性。用户可以方便地接收和发送邮件,附件等信息。同时,该系统还支持对用户权限的管理,可以对不同用户进行分组和授权,确保信息的安全性。 对于商务人员而言,该系统可以保证商务信息的安全性和准确性,方便快捷地管理和发送商务邮件。同时,对于开发者而言也是一个学习Vue和SpringBoot技术的不错案例,值得一试。 总之,基于SpringBoot+Vue的商务安全邮箱邮件收发系统是一个功能齐全、易用、实用性很高的邮箱收发平台,能够保证商务信息的准确性和安全性,提高了商务邮件发送和接收的效率。同时,对于开发者而言也是一个学习Vue和SpringBoot技术的不错案例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值