element-plus进阶使用:限制el-Select的输入字符数量

一.问题背景

        接到个需求,限制el-Select的输入字符数量,本来el-select是不能输入的,但是开启远程搜索后就可以输入,问题是官方文档并没有给出限制输入的方法,所以需要我们自己解决

以下为背景代码

<el-select
    style="width: 240px"
    v-model="tid"
    filterable
    remote
    clearable
    reserve-keyword
    placeholder="请输入门店信息"
    @change="chooseTenant"
    :remote-method="searchTenantList"
  >
    <el-option
      v-for="item in tenantList"
      :key="item.id"
      :label="item.name"
      :value="item.id">
      {{ item.name+'  ('+item.pref+')' }}
      </el-option>
  </el-select>

二.解决方法

        在外部传限制属性给内部是没有效果的,如maxlength;还有获取输入的值,再去限制v-model绑定的值也不会回显,经过查阅资料,发现只能对element组件里面的原生元素进行限制才有效果,以下是解决代码:

<el-select
    style="width: 240px"
    class="tenant-select"
    v-model="tid"
    filterable
    remote
    clearable
    reserve-keyword
    placeholder="请输入门店信息"
    @visible-change="onVisibleChange"
    @change="chooseTenant"
    :remote-method="searchTenantList"
  >
    <el-option
      v-for="item in tenantList"
      :key="item.id"
      :label="item.name"
      :value="item.id">
      {{ item.name+'  ('+item.pref+')' }}
      </el-option>
  </el-select>

// 当下拉面板展开时,设置输入框最大长度
const onVisibleChange = (visible: boolean) => {

  if (visible) {
    nextTick(() => {
      const inputEl = document.querySelector('.tenant-select input')
      if (inputEl) {
        inputEl.setAttribute('maxlength', '50')
      }
    })

  }
}

1.添加类名,以便我们获取到组件内部的input元素

2.设置内部限制属性

注意,获取内部input元素时,最好使用debugger和控制台输出一下 inputEl 的值,检查我们是否准确获取   ,我就因为获取到其他的input标签导致卡了很久

补充:

nextTick 的作用

  nextTick 能够确保在 DOM 更新完成之后再执行回调函数。在这个例子中,nextTick 会等待下拉面板展开所引发的 DOM 更新操作完成,之后再去获取输入框元素并设置 maxlength 属性,这样就能保证操作可以成功。

Element Plus的`el-tree-select`组件是一个用于选择树形结构数据的下拉列表,它支持回显功能,即当从数据库获取到预选值时,可以在组件渲染时显示完整的路径。要实现在`el-tree-select`中回显完整路径,通常需要按照以下步骤操作: 1. **设置选项**: 当获取到完整的树形数据时,每个节点应包含一个`label`用于展示文本,以及一个`value`用于关联数据库ID或其他唯一标识。 ```json [ { label: '父节点', children: [ { label: '子节点1', value: 'subnode1' }, { label: '子节点2', value: 'subnode2', path: ['父节点', '子节点2'] // 或者你可以自定义一个字段存储路径信息 } ] } ] ``` 2. **初始化组件**: 初始化`el-tree-select`时,将整个树形数据作为`options`属性传入,并且在`props-data`里设置默认已选中的项的完整路径。 ```html <el-tree :data="treeData" :props="{_children: 'children'}" :value-key="valueKey" ref="treeSelect"> <!-- ... --> </el-tree> ``` ```javascript export default { data() { return { treeData: [], // 根据实际获取的数据填充 selectedPath: ['顶级节点'], // 初始已选中的完整路径 }; }, created() { this.loadTreeData(); // 负责加载并设置初始数据 }, methods: { loadTreeData() { const initialSelection = this.selectedPath.join('/'); // 获取已选路径字符串 // ...从API或其他地方加载树形数据,如果找到匹配项,设置selectedValue // 如果有匹配,则设置this.treeData为包含完整路径的树形数据,同时更新selectedPath } }, }; ``` 3. **处理回显和切换**:当用户点击某个节点时,通过`ref`监听组件事件,比如`@select`,可以根据`value`来找出对应的节点路径,并更新`selectedPath`。 ```javascript methods: { handleSelect(node) { const path = node.path || [node.label]; // 获取当前节点路径 if (path === this.selectedPath) { // 如果路径不变,不做处理 } else { this.selectedPath = path; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值