ant desigin使用之select选择器搜索展示内容与所搜框分离

今天在使用select时搜索后没有选定搜索的内容后,鼠标滚动时发现搜索框内容分离问题。
需要在select中添加getPopupContainer参数来使搜索内容渲染到器父节点上。不加该参数搜索展示内容默认是展示在body上的,所以才有分离显示现象。

const {
  Select
} = antd;

const Option = Select.Option;

var Hello = React.createClass({
  render() {
    return <div style={{margin: 10, overflow: 'scroll', height: 200}}>
      <h2>修复滚动区域的浮层移动问题 / please try open select and scroll the area</h2>
      <div style={{padding: 100, height: 1000, background: '#eee', position: 'relative' }} id="area">
        <h4>可滚动的区域 / scrollable area</h4>
        <Select defaultValue="lucy" style={{ width: 120 }} 
        	getPopupContainer={() => document.getElementById('area')} //该参数是设置搜索的内容渲染到父元素id为area上
        >
          <Option value="jack">Jack</Option>
          <Option value="lucy">Lucy</Option>
          <Option value="yiminghe">yiminghe</Option>
        </Select>
      </div>
    </div>;
  }
});

ReactDOM.render(<Hello />,
  document.getElementById('container')
);

官网文档说明在这里插入图片描述

Ant Design Vue 的 `<a-select>` 组件支持远程搜索和可输入字符的功能,可以通过设置其 `filter-option` 属性来实现。具体实现步骤如下: 1. 设置 `<a-select>` 的 `filter-option` 为自定义函数,该函数接收两个参数:输入的搜索关键词和选项对象,返回一个布尔值表示该选项是否符合搜索条件。 ```html <a-select v-model="value" :filter-option="filterOption" :remote="true" :allow-clear="true" :show-search="true" :default-active-first-option="false" :loading="loading" :placeholder="'请输入搜索关键词'" > <a-select-option v-for="item in options" :key="item.value" :value="item.value" >{{ item.label }}</a-select-option> </a-select> ``` ```javascript data() { return { value: '', options: [], loading: false, } }, methods: { filterOption(input, option) { return option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 }, async searchOptions(value) { this.loading = true // 调用远程接口获取选项列表 this.options = await someApi.getOptions(value) this.loading = false }, }, watch: { value(newValue) { if (newValue) { this.searchOptions(newValue) } else { this.options = [] } }, } ``` 2. 设置 `<a-select>` 的 `remote` 属性为 `true`,表示开启远程搜索功能。 3. 设置 `<a-select>` 的 `allow-clear` 属性为 `true`,表示允许清空已选择的选项。 4. 设置 `<a-select>` 的 `show-search` 属性为 `true`,表示显示搜索框。 5. 设置 `<a-select>` 的 `default-active-first-option` 属性为 `false`,表示不默认选中第一项选项。 6. 设置 `<a-select>` 的 `loading` 属性为 `true`,表示正在加载选项列表。 7. 设置 `<a-select>` 的 `placeholder` 属性为提示用户输入搜索关键词的占位符。 8. 在组件的 `methods` 中定义 `filterOption` 方法,该方法根据输入的搜索关键词和选项对象判断该选项是否符合搜索条件。 9. 在组件的 `methods` 中定义 `searchOptions` 方法,该方法调用远程接口获取选项列表,并将结果保存到组件的 `options` 属性中。 10. 在组件的 `watch` 中监听 `value` 的变化,当 `value` 不为空时调用 `searchOptions` 方法获取选项列表,否则清空选项列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值