ant-design-vue中的select選擇器,對輸入值的進行篩選操作
阿新 • • 發佈:2020-10-26
今天在設計一個標籤(採用的是Select 選擇器中的標籤那一個)時,從後臺返回了資料,但是在輸入值時,沒有對回顯的值進行過濾匹配,通過檢視官方文件,解決了這個問題。
記在這裡方便以後檢視。
<a-form-item label='標籤' v-bind="formItemLayout"> <a-select mode="tags" :allowClear="true" :filterOption="filterOption" style="width: 100%" v-decorator="['tag',{rules: [{ required: true,message: '請選擇標籤' }]}]"> <a-select-option v-for="t in tags" :key="t.id.toString()">{{t.tagName}}</a-select-option> </a-select> </a-form-item>
methods中:
filterOption(input,option) { return ( option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 ); },
其中對於過濾起作用的是filterOption
官網上對其的解釋:
補充知識:ant design的Select下拉選擇器 帶搜尋功能
在做專案的過程中,可能會遇到 下拉框內容較多,為了方便使用者選擇加入檢索功能。
用法
利用ant design 中的select選擇器完成此功能。
首先 要獲取下拉選擇內容資料,和普通下拉選的資料結構一致,陣列物件 鍵值對。
然後把資料渲染到選擇器中,我在專案中 遇到的是資料較多,但是為了防止資料下拉較長,後端返回資料做了類似分頁處理,每次返回10條資料,那在獲取初始資料時其實就獲取了十條資料。
把資料放到一個空陣列中,然後渲染到選擇器中。
componentDidMount() { const { dispatch } = this.props; dispatch({ type: 'project/searchProject',payload: { },callback: (res) => { this.setState({ data: res.data }) } }); }
const children = []; data.forEach(d => { children.push(<Option key={d.id}>{d.name}</Option>); })
<Select showSearch allowClear labelInValue placeholder="請選擇專案" optionFilterProp="children" onSearch={this.handleSearch} onChange={this.handleChange} filterOption={(input,option) => option.props.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0 } > {children} </Select>
那在觸發搜尋功能的時候,其實只是搜尋了10條內容,那在onSearch中還有去請求其他資料。
handleSearch = value => { const { dispatch } = this.props; dispatch({ type: 'project/searchProject',payload: { q: value },callback: (res) => { this.setState({ data: res.data }) } }); };
如果輸錯了搜尋內容,往回刪除修改的時候還需要去請求一次資料,觸發了onChange事件。
handleChange = value => { const { dispatch } = this.props; dispatch({ type: 'project/searchProject',callback: (res) => { this.setState({ data: res.data }) } }); };
現在功能完成了。
效果圖如下:
以上這篇ant-design-vue中的select選擇器,對輸入值的進行篩選操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。