137 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Vue
		
	
	
| import createRef from '../../_util/createRef';
 | |
| /* eslint-disable no-console */
 | |
| import Select, { Option } from '..';
 | |
| import '../assets/index.less';
 | |
| import { nextTick } from 'vue';
 | |
| 
 | |
| const Combobox = {
 | |
|   data() {
 | |
|     this.textareaRef = createRef();
 | |
| 
 | |
|     this.timeoutId;
 | |
|     return {
 | |
|       disabled: false,
 | |
|       value: '',
 | |
|       options: [],
 | |
|     };
 | |
|   },
 | |
| 
 | |
|   mounted() {
 | |
|     nextTick(() => {
 | |
|       console.log('Ref:', this.textareaRef.current);
 | |
|     });
 | |
|   },
 | |
|   methods: {
 | |
|     onChange(value, option) {
 | |
|       console.log('onChange', value, option);
 | |
| 
 | |
|       this.value = value;
 | |
|     },
 | |
| 
 | |
|     onKeyDown(e) {
 | |
|       const { value } = this;
 | |
|       if (e.keyCode === 13) {
 | |
|         console.log('onEnter', value);
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     onSelect(v, option) {
 | |
|       console.log('onSelect', v, option);
 | |
|     },
 | |
| 
 | |
|     onSearch(text) {
 | |
|       console.log('onSearch:', text);
 | |
|     },
 | |
| 
 | |
|     onAsyncChange(value) {
 | |
|       window.clearTimeout(this.timeoutId);
 | |
|       console.log(value);
 | |
|       this.options = [];
 | |
|       //const value = String(Math.random());
 | |
|       this.timeoutId = window.setTimeout(() => {
 | |
|         this.options = [{ value }, { value: `${value}-${value}` }];
 | |
|       }, 1000);
 | |
|     },
 | |
| 
 | |
|     toggleDisabled() {
 | |
|       const { disabled } = this;
 | |
| 
 | |
|       this.disabled = !disabled;
 | |
|     },
 | |
|   },
 | |
| 
 | |
|   render() {
 | |
|     const { value, disabled } = this;
 | |
|     return (
 | |
|       <div>
 | |
|         <h2>combobox</h2>
 | |
|         <p>
 | |
|           <button type="button" onClick={this.toggleDisabled}>
 | |
|             toggle disabled
 | |
|           </button>
 | |
|           <button
 | |
|             type="button"
 | |
|             onClick={() => {
 | |
|               this.value = '';
 | |
|             }}
 | |
|           >
 | |
|             reset
 | |
|           </button>
 | |
|         </p>
 | |
|         <div>
 | |
|           <Select
 | |
|             disabled={disabled}
 | |
|             style={{ width: '500px' }}
 | |
|             onChange={this.onChange}
 | |
|             onSelect={this.onSelect}
 | |
|             onSearch={this.onSearch}
 | |
|             onInputKeyDown={this.onKeyDown}
 | |
|             notFoundContent=""
 | |
|             allowClear
 | |
|             placeholder="please select"
 | |
|             value={value}
 | |
|             mode="combobox"
 | |
|             backfill
 | |
|             onFocus={() => console.log('focus')}
 | |
|             onBlur={() => console.log('blur')}
 | |
|           >
 | |
|             <Option value="jack">
 | |
|               <b style={{ color: 'red' }}>jack</b>
 | |
|             </Option>
 | |
|             <Option value="lucy">lucy</Option>
 | |
|             <Option value="disabled" disabled>
 | |
|               disabled
 | |
|             </Option>
 | |
|             <Option value="yiminghe">yiminghe</Option>
 | |
|             <Option value="็ซนๆๆๅ
">็ซนๆๆๅ
</Option>
 | |
|           </Select>
 | |
| 
 | |
|           <h3>Customize Input Element</h3>
 | |
|           <Select
 | |
|             mode="combobox"
 | |
|             style={{ width: '200px' }}
 | |
|             getInputElement={() => (
 | |
|               <textarea style={{ background: 'red' }} rows={3} ref={this.textareaRef} />
 | |
|             )}
 | |
|             options={[{ value: 'light' }, { value: 'bamboo' }]}
 | |
|             allowClear
 | |
|             placeholder="2333"
 | |
|           />
 | |
| 
 | |
|           <h3>Async Input Element</h3>
 | |
|           <Select
 | |
|             mode="combobox"
 | |
|             notFoundContent={null}
 | |
|             style={{ width: '200px' }}
 | |
|             options={this.options}
 | |
|             onChange={this.onAsyncChange}
 | |
|           />
 | |
|         </div>
 | |
|       </div>
 | |
|     );
 | |
|   },
 | |
| };
 | |
| 
 | |
| export default Combobox;
 | |
| /* eslint-enable */
 |